[백준 14910] 오르막 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
공백으로 구분된 정수 수열이 주어지는 상황에서, 수열의 개수 N (1 ≤ N ≤ 1,000,000)과 각 정수가 한 줄에 주어질 때, 수열이 비내림차순인지 판정하는 문제입니다.
비내림차순은 A₁ ≤ A₂ ≤ … ≤ Aₙ을 만족하는 수열을 의미합니다. 즉, 다음 수가 이전 수보다 크거나 같아야 합니다. 조건을 만족하면 Good을, 아니면 Bad를 출력합니다.
접근법
수열을 앞에서부터 순회하며 비내림차순 조건을 확인합니다.
먼저 첫 번째 수를 기준으로 시작하여 다음 수를 읽을 때마다 이전 수와 비교합니다. 현재 수가 이전 수보다 작다면 비내림차순 조건이 깨지므로 즉시 Bad를 출력하고 종료합니다.
이렇게 모든 수를 확인할 때까지 조건이 한 번도 깨지지 않으면 Good을 출력합니다.
예를 들어, 수열 [1, 3, 3, 5, 7]은 각 수가 이전 수보다 크거나 같으므로 Good입니다. 반면 [1, 3, 2, 5]는 세 번째 수(2)가 두 번째 수(3)보다 작으므로 Bad입니다.
각 수를 한 번씩만 확인하므로 시간 복잡도는 O(N)입니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Linq;
class Program {
static void Main() {
var tokens = Console.ReadLine()!.Split();
bool ok = true;
int prev = int.MinValue;
for (int i = 0; i < tokens.Length; i++) {
int cur = int.Parse(tokens[i]);
if (i > 0 && cur < prev) { ok = false; break; }
prev = cur;
}
Console.WriteLine(ok ? "Good" : "Bad");
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
bool ok = true;
int prev, cur;
if (!(cin >> prev)) return 0;
while (cin >> cur) {
if (cur < prev) { ok = false; break; }
prev = cur;
}
cout << (ok ? "Good" : "Bad") << "\n";
return 0;
}