Uknow's Lab.
article thumbnail

https://www.acmicpc.net/problem/5211

 

5211번: 가단조와 다장조

첫째 줄에 음악이 주어진다. 음악은 {"A", "B", "C", "D", "E", "F", "G", "|"}로 이루어져 있으며, 길이는 5보다 크거나 같고, 100을 넘지 않는다. |가 연속해서 등장하거나, 문자열의 양쪽 끝에 나오는 경우

www.acmicpc.net

 

난이도 : 브론즈1
태그 : 구현, 문자열

 

 

설명

음악을 배경으로 한 코딩테스트 문제입니다.

 

"|" 문자를 기준으로 문자열을 분리하고, 분리된 각 문자열의 맨 앞글자를 이용해

가장조와 다장조를 각각 카운팅하면 됩니다.

 

만약 가단조와 다장조 개수가 같을 경우,

문자열의 맨 끝 문자를 비교하여 판단합니다.

 

 

 

 

소스코드

 

line = input().strip().split("|")

ade_minor = ['A', 'D', 'E']
cfg_major = ['C', 'F', 'G']

ade_minor_cnt = 0
cfg_major_cnt = 0

# 음조는 가장조와 다장조 두 가지만 입력으로 주어지는 것이 아니므로 if - else 로 하면 안됨
for i in line:
    if i[0] in ade_minor:
        ade_minor_cnt += 1
    if i[0] in cfg_major:
        cfg_major_cnt += 1

# 가단조 ade -> minor
# 다장조 cfg -> major
if ade_minor_cnt == cfg_major_cnt:
    if line[-1][-1] in cfg_major:
        cfg_major_cnt += 1
    if line[-1][-1] in ade_minor:
        ade_minor_cnt += 1

if ade_minor_cnt < cfg_major_cnt:
    print("C-major")
else:
    print("A-minor")

 

 

후기

입력으로 가단조와 다장조 두가지만 주어지는 줄 알고 if - else를 통해 풀었는데,

수많은 '틀렸습니다'를 받고, 뭔가 이상한데...? 하는 마음에

각각의 경우를 else를 없애고 각각 체크했더니 통과했던 문제였습니다

 

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.