본문 바로가기
백준 알고리즘 코딩

[C언어] 백준 2920번 음계

by 1005_ 2025. 3. 28.

[ 문제 ]

다장조는 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 중 하나를 출력한다.

[ 작성한 코드 ]

#include <stdio.h>

int main()
{
    int N[8] = {0};
    int i;
    int j = 1, k = 1; //j는 ascending일때 , k는 descending일때


    for(i = 0; i < 8; i++)
    {
        scanf("%d",&N[i]);
    }
    for(i = 0; i < 8; i++)
    {
        if(N[i] != i+1) // 1 2 3 4 5 6 7 8 순서일때
        {
            j = 0;
        }
        if(N[i] != 8-i) // 8 7 6 5 4 3 2 1 순서일때
        {
            k = 0;
        }
    }

    if(j == 1)
    {
        printf("ascending");
    }
    else if(k == 1)
    {
        printf("descending");
    }
    else
    {
        printf("mixed");
    }

    return 0;

}

 

입력된 숫자가 오름차순인지 내림차순인지만 판별하면 되는 문제이다.

그럼에도 몇번을 틀렸는데 일단 오름차순인지 내림차순인지를 판별하는 반복문에서 if - if 가 아닌 if - else if를 사용하는 실수를 했고 초기값을 잘 못 설정하는등의 실수를 했다.

문제를 풀 때 최대한 빨리 풀어보려는데에 초점을 두지말고, 시간이 조금 더 걸리더라도 실수를 줄여야겠다.

 

알고리즘 분류

  • 구현