사자자리

[C언어] 백준 5211번: 가단조와 다장조 본문

C언어/C언어 문제

[C언어] 백준 5211번: 가단조와 다장조

renne 2022. 8. 4. 11:24

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. 가단조와 다장조의 중심음 개수를 비교하고, 맞는 음계를 출력한다.

Comments