사자자리
[C언어] 백준 5211번: 가단조와 다장조 본문
https://www.acmicpc.net/problem/5211
5211번: 가단조와 다장조
첫째 줄에 음악이 주어진다. 음악은 {"A", "B", "C", "D", "E", "F", "G", "|"}로 이루어져 있으며, 길이는 5보다 크거나 같고, 100을 넘지 않는다. |가 연속해서 등장하거나, 문자열의 양쪽 끝에 나오는 경우
www.acmicpc.net
#include <stdio.h>
#include <string.h>
int main(){
int Aminor, Cmajor, alpha[7] = {0};
char code[101] = {0}, last;
scanf("%s", code);
for (int i = 0; i < strlen(code); i++){
if (i == 0) alpha[code[i] - 65]++;
else if (code[i] == '|') alpha[code[i+1] - 65]++;
}
Aminor = alpha[0] + alpha[3] + alpha[4];
Cmajor = alpha[2] + alpha[5] + alpha[6];
if (Aminor > Cmajor) printf("A-minor");
else if (Aminor < Cmajor) printf("C-major");
else {
last = code[strlen(code) - 1];
if (last == 'A' || last == 'D' || last == 'E') printf("A-minor");
else if (last == 'C' || last == 'F' || last == 'G') printf("C-major");
}
return 0;
}
[문제 정리]
1. 각 마디의 첫 음으로 나오는 중심음이 가장 많은 음계가 그 음악의 음계이다.
2. 가단조와 다장조의 중심음 개수가 같으면, 마지막 음으로 음계를 결정한다.
3. 중심음
- 가단조(A-minor): A, D, E
- 다장조(C-major): C, F, G
[코드 설명]
1. 문자열 code에 음악을 입력받는다.
2. code의 0번째 원소를 카운트한다. 카운트 방식은 ASCII를 이용했다.
3. code의 i번째 원소가 '|'이면, (i + 1)번째 원소를 카운트한다.
4. 가단조와 다장조의 중심음 개수를 구한다.
5. 가단조와 다장조의 중심음 개수를 비교하고, 맞는 음계를 출력한다.
'C언어 > C언어 문제' 카테고리의 다른 글
[C언어] 백준 3060번: 욕심쟁이 돼지 (0) | 2022.08.11 |
---|---|
[C언어] 백준 8595번: 히든 넘버 (0) | 2022.08.11 |
[C언어] 백준 10989번: 수 정렬하기 3 (0) | 2022.08.03 |
[C언어] 백준 1159번: 농구 경기 (0) | 2022.08.03 |
[C언어] 백준 2914번: 저작권 (0) | 2022.08.03 |
Comments