2920. 음계

2021-10-29
백준 2920번 풀이

이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!

문제

2920번: 음계

풀이

아이디어

문제에서는 음계라고 표현하긴 했지만 결론적으로 문제에서 요구하는 바는 1부터 8까지의 숫자를 입력받고, 그 순서가 1. 오름차순인지(ascending), 2. 내림차순인지(descending), 3. 임의의 순서인지(mixed)를 구분하라는 것이다.

무조건 8개의 숫자가 입력되고, 그 구성도 1부터 8까지의 숫자임을 이용해서, 가장 첫번째로 입력된 값이 1이면 나머지 입력들이 오름차순인지 확인하고, 8이면 나머지 입력들이 내림차순인지 확인했다.

만약에 가장 첫번째로 입력된 값이 1과 8 모두 아니라면 해당 배열은 오름차순도, 내림차순도 될 수 없으므로 임의의 순서 라고 출력해주었다.

코드

/*
2021-10-29
2920_음계
https://www.acmicpc.net/problem/2920
*/

# include <iostream>
using namespace std;

int main(){
    int input[8];
    int status;  // 0: ascending, 1: descending
    for(int i = 0; i < 8; i++)
        cin >> input[i];
    if (input[0] != 1 && input[0] != 8){
        cout << "mixed";
        return (0);
    }
    for (int i = 0; i < 7; i++){
        if (i == 0 && input[i] == 1)
            status = 0;
        else if (i == 0 && input[i] == 8)
            status = 1;
        // 증가하는 상황인데 조건에 맞지 않는 경우
        if (status == 0 && (input[i] > input[i + 1])){
            cout << "mixed";
            return (0);
        }
        // 감소하는 상황인데 조건에 맞지 않는 경우
        else if (status == 1 && (input[i] < input[i + 1])){
            cout << "mixed";
            return (0);
        }
    }
    if (status == 0)
        cout << "ascending";
    else
        cout << "descending";

    return (0);
}