새벽을 밝히는 붉은 달
[C] 백준 14910번: EOF를 만날 때 scanf를 끝내는 방법 본문
문제
주어진 N개의 정수가 비내림차순으로 나열되어 있는지 판정하는 프로그램을 작성하시오. N개의 수 A1, A2, ..., AN이 A1 ≤ A2 ≤ ... ≤ AN 을 만족하는 것을 비내림차순이라고 한다.
입력
첫째 줄에 공백으로 구분된 N(1 ≤ N ≤ 1,000,000)개의 정수가 주어진다. 입력으로 주어지는 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
비내림차순으로 나열되어 있으면 Good을 출력하고, 그렇지 않으면 Bad을 출력한다.
오늘도 이전에 못 풀었던 문제이다!
예전에 왜 틀렸는지는 잘 모르겠다. 아마 입력에서 틀리지 않았을까 싶다.
처음에는 gets()함수를 이용해서 입력을 받으려고 했는데,
gets()는 개행문자 단위로 입력을 받기 때문에 위 문제의 공백을 거를 수는 없었다.
그래서 scanf()로 입력을 받기로 했는데, EOF(End of File)을 만나면 어떻게 멈추어야 할지를 잘 모르겠는 거다!
일단 변수를 받은 다음에, 그 변수가 EOF인지를 체크하는 식을 생각했다.
구글링을 해보니 더 좋은 방식의 입력방식이 있었다.
위 문제처럼 입력받을 경우 while(scanf("%d", &n) != EOF) 로 하면
EOF를 만나기 전까지 쭉 입력을 받게 된다.
앞으로 비슷한 입력 문제를 만날 때, 자주 애용을 해야겠다😊
아래는 내가 구현한 코드👇
#include <stdio.h>
int main(void)
{
int current, next;
scanf("%d", ¤t);
while (scanf("%d", &next) != EOF) {
if (current > next) {
printf("Bad\n");
return 0;
}
else current = next;
}
printf("Good\n");
return 0;
}
✍새로 안 사실들
1. '1 2 3 4 5' 처럼 EOF를 만나기 전까지 입력을 받아야 하는 경우,
while(scanf("%d", &n) != EOF) 를 사용하면 된다.
'Online Judge' 카테고리의 다른 글
[C] 백준 1181번: merge sort 구현하기 (1) | 2020.09.10 |
---|---|
[C] 백준 10814번: qsort함수 되새기기 (0) | 2020.09.09 |
[C] 백준 1920번: 나의 첫 퀵 소트와 이진 탐색 (0) | 2020.09.07 |
[C/Python] 백준 1914번: C로 Big Integer 구현하기 (5) | 2020.09.06 |
[C] 백준 1065번: bool은 stdbool.h에! (0) | 2020.09.05 |