반응형
문제
다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.
1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.
연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.
입력
첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다.
출력
첫째 줄에 ascending, descending, mixed 중 하나를 출력한다.
구상
배열의 첫 번째 수가 1일때, 8일때, 둘 다 아닐때로 나누어 생각한다.
상향 음계라면 배열에 1, 2, 3, 4, 5, 6, 7, 8이 차례대로 들어가므로 첫 번째 수가 1일 때 나머지 수가 제대로 들어가 있는지 확인하면 된다. 하나라도 잘못되어 있다면 플래그 역할 변수를 mixed에 해당하는 수로 바꾸고 구문을 멈춘다.
하향 음계라면 반대로 8, 7, 6, 5, 4, 3, 2, 1이 차례대로 들어가 있을테고 첫 번째 수가 8일 때 나머지를 확인한다.
둘 다 아니라면 mixed가 확실하므로 어떤 동작도 취할 필요 없다.
나는 플래그 변수를 처음부터 mixed로 지정했기 때문이다.
코드
#include <stdio.h>
int main(void)
{
int melody[8] = { 0 };
int check = 0; //1:ascending, 2:descending, 0:mixed
for (int i = 0; i < 8; i++) {
scanf("%d", &melody[i]);
}
//상향 음계인지 확인
if (melody[0] == 1) {
for (int i = 1; i < 8; i++) {
if (melody[i] == i + 1) {
check = 1;
}
else {
check = 0;
break;
}
}
}
//하향 음계인지 확인
else if (melody[0] == 8) {
for (int i = 1; i < 8; i++) {
if (melody[i] == 8 - i) {
check = 2;
}
else {
check = 0;
break;
}
}
}
if (check == 1) printf("ascending");
else if (check == 2) printf("descending");
else printf("mixed");
return 0;
}
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
[C언어] 백준 1018. 체스판 다시 칠하기 (1) | 2022.10.31 |
---|---|
[C언어] 백준 5597. 과제 안 내신 분..? (0) | 2022.10.26 |
[C언어] 백준 1427. 소트인사이드 (0) | 2022.10.22 |
[C언어] 백준 10989. 수 정렬하기 3 (0) | 2022.10.20 |
[C언어] 백준 2475. 검증수 (0) | 2022.10.18 |