알고리즘/문제 풀이

2920번: 음계

Themion 2021. 12. 21. 20:29

https://www.acmicpc.net/problem/2920

 

2920번: 음계

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

www.acmicpc.net

음을 8개 입력받은 뒤, 각 음을 이전 음과 비교했을 때 현재 음이 이전 음보다 크다면 descending이 아니고, 현재 음이 이전 음보다 작다면 ascending이 아니다. 이를 모든 음에 대해 조사한다면 ascending인지, descending인지, 아니면 mixed인지 판별할 수 있다.

#include <cstdio>

int main() {
    // asc: 연주가 ascending이라면 true, 아니라면 false
    // des: 연주가 descending이라면 true, 아니라면 false
    bool asc = true, des = true;
    // 연주한 음 여덟 개를 차례로 받아온다
    int input[8];

    // 문제의 조건을 입력받은 뒤
    for (int i = 0; i < 8; i++) scanf("%d", input + i);

    // 각 음을 이전 음과 비교한다
    // 음이 한번이라도 올라간다면 이 연주는 descending이 아니다
    // 음이 한번이라도 내려간다면 이 연주는 ascending이 아니다
    for (int i = 1; i < 8; i++) {
        if (input[i - 1] > input[i]) asc = false;
        if (input[i - 1] < input[i]) des = false;
    }

    // asc와 des를 이용해 이 연주의 종류를 파악한 뒤 출력한다
    printf("%s\n", (asc ? "ascending" : (des ? "descending" : "mixed")));

    return 0;
}