PS/Baekjoon Online Judge

[백준 2920] 음계 [C]

kimyoungrok 2021. 7. 11. 17:55

백준 - 2920


풀이

항상 1부터 8까지 8개의 수가 입력되고, 오름차순 또는 내림차순으로 정렬되어있는지 아닌지를 확인하면 된다.

때문에, 반복문 내의 변수 i값의 증가를 이용해 확인할 수 있다.

 

  • ascending 또는 descending라면 입력된 수들의 처음과 끝수의 합이 항상 9 이다.
  • 1 ~ 4번째 수가  i + 1과 동일하다면, ascending이다. (5~8번째 수의 쌍은 위 조건에서 만족한다.)

처럼 풀이하는게 문제의 출제의도이나, 입력되는 수들을 하나의 문자열로 생각하면 쉽게 해결할 수 있다.

??? : 숫자가 주어진다 했지 문자열이 아니라고는 안했다.

하지만, 이 방법은 비교할 문자열을 직접 작성 또는 생성을 해야 하므로 간결하면서도 무식한 방법이라고 볼 수 있다.

만약 숫자가 1부터 100이라면?


소스코드

#include <stdio.h>
#define N 8
int main() {
    int key[N], as = 0, des = 0;
    for (int i = 0; i < N; i++)
        scanf("%d", &key[i]);
    for (int i = 0; i < N / 2; i++) 
        if (key[i] + key[N - 1 - i] != 9)
            break;
        else 
            (key[i] == i + 1) ? as++ : des++; 
    
    if (as == 4)
        puts("ascending");
    else if (des == 4)
        puts("descending");
    else 
        puts("mixed");
}
#include <stdio.h>
#include <string.h>
int main(){
    char str[17];
    gets(str);
    if (!strcmp(str,"1 2 3 4 5 6 7 8"))
        puts("ascending");
    else if (!strcmp(str, "8 7 6 5 4 3 2 1"))
        puts("descending");
    else 
        puts("mixed");
}

출처

 

2920번: 음계

다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8

www.acmicpc.net

 

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 8958] OX퀴즈 [C]  (0) 2021.07.11
[백준 3052] 나머지 [C]  (0) 2021.07.11
[백준 10866] 덱 [C]  (0) 2021.07.10
[백준 2908] 상수 [C]  (0) 2021.07.10
[백준 2884] 알람 시계 [C]  (0) 2021.07.10