문제
주어진 N개의 정수가 비내림차순으로 나열되어 있는지 판정하는 프로그램을 작성하시오. N개의 수 A1, A2, ..., AN이 A1 ≤ A2 ≤ ... ≤ AN 을 만족하는 것을 비내림차순이라고 한다.
입력
첫째 줄에 공백으로 구분된 N(1 ≤ N ≤ 1,000,000)개의 정수가 주어진다. 입력으로 주어지는 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
비내림차순으로 나열되어 있으면 Good을 출력하고, 그렇지 않으면 Bad을 출력한다.
전에 틀렸던 문제를 다시 풀었다.
가장 처음 입력에서 막혔는데 getline()으로 입력문 전체를 string으로 입력 받았다.
- 공백처리
- 음수처리
- 숫자의 범위 (-1,000,000 ~ 1,000,000)
이 두가지를 하나하나 깨닫고 해결하는 데 시간이 오래 걸렸다...
string으로 입력을 받았기 때문에 ' '공백일 경우 반복문을 통과.
음수라면 '-' 부호를 처리하여 나중에 -1을 곱해서 음수 처리.
또한 입력된 숫자가 1의자리 숫자가 아닐 수 있기 때문에 공백이 다시 나올 때까지 이어진 숫자 문자열을 int형으로 변환.
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
string s;
getline(cin, s);
int prevNum = -1000001;
for (int i = 0; i < s.length(); i++) {
int sign = 1;
if (s[i] == ' ') {
continue;
}
if (s[i] == '-') {
sign = -1;
++i;
}
int num = 0;
while (i < s.length() && s[i] != ' ') {
num = num * 10 + (s[i] - '0');
++i;
}
num *= sign;
if (num < prevNum) {
cout << "Bad";
return 0;
}
prevNum = num;
}
cout << "Good";
return 0;
}
# 문제를 맞춘 사람이 1483명인데 그 중에 이 문제로만 6등했다...! 우와 이런거 신기해
아마도 알고리즘 시간때문인 것 같다!
'Algorithm' 카테고리의 다른 글
| 백준 12847번 꿀 아르바이트 (C++) (0) | 2025.04.13 |
|---|---|
| 백준 20057번 마법사 상어와 토네이도 (C++) (0) | 2025.04.04 |
| 백준 1915번 가장 큰 정사각형 (C++) (0) | 2025.03.26 |
| 백준 7490번 0 만들기(C++) (1) | 2025.03.23 |
| 백준 1551번 수열의 변화(C++) (0) | 2024.03.07 |