문제
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;
}