풀이
항상 1부터 8까지 8개의 수가 입력되고, 오름차순 또는 내림차순으로 정렬되어있는지 아닌지를 확인하면 된다.
때문에, 반복문 내의 변수 i값의 증가를 이용해 확인할 수 있다.
- ascending 또는 descending라면 입력된 수들의 처음과 끝수의 합이 항상 9 이다.
- 1 ~ 4번째 수가 i + 1과 동일하다면, ascending이다. (5~8번째 수의 쌍은 위 조건에서 만족한다.)
처럼 풀이하는게 문제의 출제의도이나, 입력되는 수들을 하나의 문자열로 생각하면 쉽게 해결할 수 있다.
??? : 숫자가 주어진다 했지 문자열이 아니라고는 안했다.
하지만, 이 방법은 비교할 문자열을 직접 작성 또는 생성을 해야 하므로 간결하면서도 무식한 방법이라고 볼 수 있다.
만약 숫자가 1부터 100이라면?
소스코드
#include <stdio.h>
#define N 8
int main() {
int key[N], as = 0, des = 0;
for (int i = 0; i < N; i++)
scanf("%d", &key[i]);
for (int i = 0; i < N / 2; i++)
if (key[i] + key[N - 1 - i] != 9)
break;
else
(key[i] == i + 1) ? as++ : des++;
if (as == 4)
puts("ascending");
else if (des == 4)
puts("descending");
else
puts("mixed");
}
#include <stdio.h>
#include <string.h>
int main(){
char str[17];
gets(str);
if (!strcmp(str,"1 2 3 4 5 6 7 8"))
puts("ascending");
else if (!strcmp(str, "8 7 6 5 4 3 2 1"))
puts("descending");
else
puts("mixed");
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 8958] OX퀴즈 [C] (0) | 2021.07.11 |
---|---|
[백준 3052] 나머지 [C] (0) | 2021.07.11 |
[백준 10866] 덱 [C] (0) | 2021.07.10 |
[백준 2908] 상수 [C] (0) | 2021.07.10 |
[백준 2884] 알람 시계 [C] (0) | 2021.07.10 |