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인지 판별하는 프로그램을 작성하시오.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int now = 0; int umgye[8] = { 0, }; int main() { //freopen("test.txt", "r", stdin); for (int i = 0; i < 8; i++) { cin >> umgye[i]; } for (int i = 0; i < 7; i++) { if (umgye[i + 1] == umgye[i] + 1)now = 1; else if (umgye[i + 1] == umgye[i] - 1)now = 2; else { now = 3; break; } } switch (now) { case 1: cout << "ascending"; break; case 2: cout << "descending"; break; case 3: cout << "mixed"; break; } } | cs |
이렇게 풀이했습니다.
현재상태를 now로 저장을해서 1인경우는 ascending 2인경우에는 descending 3인경우는 mixed로 출력하게했습니다
다음요소가 현재요소보다 1이 크다면 계속 1을 대입하고 1보다 작은순간은 2를 넣습니다.
이게 1씩증가하는 수만의 조합이라면 2차이가 날 수 없기 때문에 차이가 2가 나는순간 바로 mixed로 판별이되고 break로 구문을 빠져나오게 됩니다.