코딩테스트 & 문제 풀이

[Python]백준_5211 : 가단조와 다장조

Hicecream 2023. 11. 10. 00:44

2022년 12월 30일에 작성됨

 

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

 

5211번: 가단조와 다장조

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

www.acmicpc.net

 

 

문제 분석

각 마디를 |을 기준으로 나눠서 각 마디의 첫 음으로 나오는 중심음이 다장조인지 가단조인지 판별해주고 그 개수를 세어서 더 많은 음계가 그 음악의 음계가 된다.
만약, 개수가 같은 경우에는 마지막 마디의 맨 끝의 음으로 음계를 정한다.

 

 

소스 코드 (⭕)

da_long = ["C", "F", "G"]
ga_short = ["A", "D", "E"]

music = input().split('|')

da_cnt = 0
ga_cnt = 0
last = music[-1][-1]

for i in music:
    if i[0] in da_long:
        da_cnt += 1
    if i[0] in ga_short:
        ga_cnt += 1


if da_cnt == ga_cnt:
    if last in da_long:
        da_cnt += 1
    if last in ga_short:
        ga_cnt += 1

if da_cnt > ga_cnt:
    print("C-major")
else:
    print("A-minor")

 

코드 분석

1. 다장조 리스트에 C, F, G를 넣어주고, 가단조 리스트에 A, D, E를 넣어준다.

2. music 변수에 각 마디를 |를 기준으로 나눠서 입력받고, if문으로 각 마디의 첫 음이 다장조인지 가단조인지 판별해주고 그 개수를 세어준다.

3. 만약, 다장조와 가단조의 개수가 같을 경우, 마지막 마디의 맨 끝 음이 다장조인지 가단조인지 판별하고 개수를 추가해준다.

4. 다장조의 개수가 많으면 C-major을 출력하고 가단조의 개수가 많으면 A-minor를 출력한다.

 

 

 

end

문제 이해하는데 좀 오래걸렸다! 음악 전문 용어가 막 나와서 어려워보였던 문제였는데 알고보니 쉬운 문제였다.