문제

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

설명

뭔가 금방 끝날 것 같아서 덤볐는데 오히려 알고리즘을 극단적으로 단순화 시킬 생각이 먼저 앞서서 오히려 시간이 더 지체 된 것 같다. 결국 풀긴했는데 소스가 약간 더러워진 것 같아서 나중에 기회가 된다면 조금더 단순화 시켜보는것도 좋을 것 같다. 일단 소스는 반복문을 통해서 입력을 받고 입력을 받으면서 증가인지 감소인지 아님 믹스드인지 검증하는데 2번째 배열에 입력을 시작할떄 부터 이 배열이 증가인지 감소인지 아님 믹스드인지 확인하고 믹스드이면 바로 반복문을 중단하고 벗어나도록 하고 스위치문을 통해 [mixed]라고 출력되도록 한다. 아닌경우에는 updown변수를 증가이면1, 감소면-1로 두도록 한다. 그리고 3번째 배열을 입력받을때부터 updown이 1이면 계속 1씩 증가하고 있는지, -1이면 계속 1씩 감소하는지 검증하고 하나라도 아닌것이 발견되면 바로 반복문을 종료하고 [mixed] 라고 출력하도록 한다. 마지막으로 끝까지 증가, 감소인 것이 확인되면 반복문을 모두 마치고 나와서 스위치문을 통해 증가이면 [ascending] 을, 감소면 [descending] 을 출력하도록 한다. (뭔가 이렇게 적어보면 알고리즘이 그렇게 복잡한 것 같진 않은데 말이지… ㅡ_ㅡ;;)

코드

#include <stdio.h>

int main() {
    int melody[8],updown = 0;

    for (int i=0; i<8; i++)
    {
        scanf("%d",&melody[i]);
        if (i==1)
            if(melody[i] == melody[i-1]-1)
                updown = -1;
            else if(melody[i] == melody[i-1]+1)
                updown = 1;
            else
            {
                updown = 0;
                break;
            }
        if (i>1)
        {
            if (updown == 1)
            {
                if(melody[i] != melody[i-1]+1)
                {
                    updown = 0;
                    break;
                }
            }
            else if (updown == -1)
            {
                if(melody[i] != melody[i-1]-1)
                {
                    updown = 0;
                    break;
                }
            }
        }
    }
    switch (updown) {
        case 1:
            printf("ascending");
            break;
        case -1:
            printf("descending");
            break;
        case 0:
            printf("mixed");
            break;
    }
    return 0;
}