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
문제 이해하는데 좀 오래걸렸다! 음악 전문 용어가 막 나와서 어려워보였던 문제였는데 알고보니 쉬운 문제였다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]백준_23253 : 자료구조는 정말 최고야 (0) | 2023.11.11 |
---|---|
[Python]백준_5426 : 비밀 편지 (0) | 2023.11.10 |
[Python]백준_5566 : 주사위 게임 (0) | 2023.11.10 |
[Python]백준_13301 : 타일 장식물 (2) | 2023.11.09 |
[Python]백준_17358 : 복불복으로 지구 멸망 (2) | 2023.11.09 |