> [!date] published: 2021-10-29
[2920번: 음계](https://www.acmicpc.net/problem/2920)
## 🌟 문제
다장조는 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. 오름차순인지(`ascending`), 2. 내림차순인지(`descending`), 3. 임의의 순서인지(`mixed`)를 구분하라는 것이다.
무조건 8개의 숫자가 입력되고, 그 구성도 1부터 8까지의 숫자임을 이용해서, 가장 첫번째로 입력된 값이 1이면 나머지 입력들이 오름차순인지 확인하고, 8이면 나머지 입력들이 내림차순인지 확인했다.
만약에 가장 첫번째로 입력된 값이 1과 8 모두 아니라면 해당 배열은 오름차순도, 내림차순도 될 수 없으므로 임의의 순서 라고 출력해주었다.
## 🌟 코드
```cpp
/*
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);
}
```