※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 12971번 문제인 APC는 쉬운 난이도 순일까, 아닐까?이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/25955

 

25955번: APC는 쉬운 난이도 순일까, 아닐까?

선우는 APC 문제를 만들기 위해 고민하며 역대 APC들을 둘러보던 와중, 이 대회들의 문제가 난이도가 쉬운 순으로 배치되어 있는 경향을 발견했다! 문제 출제가 완료되고 올해도 이러한 기조를 지

www.acmicpc.net

 

주어진 순서대로의 문제들의 배열을 A, 난이도 순서대로 정렬된 문제들의 배열을 B라 하자. 이때 A와 B가 같다면 문제의 답은 OK가 될 것이고 그렇지 않다면 KO가 될 것임은 자명하다. 한편 문제의 조건에 따라 A와 B에서 차례가 서로 다른 문제가 정확히 한 쌍 존재하므로 답이 KO인 경우 A와 B를 살펴 문제를 해결할 수 있다.

 

문제의 배열을 정렬해 문제를 해결하자. 정렬에 사용할 비교 기준을 구현할 때 B, S, G, P, D의 순서는 자연스러운 비교가 어려우므로 이에 신경써 구현하자. 또한 수를 문자열의 상태로 두고 비교하면 이 문제에서 필요한 대소비교가 되지 않는다는 점에도 유의하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int N;
pair<int, int> A[1000], B[1000];
vector<int> ans;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	for (int i = 0; i < N; i++) {
		string s; cin >> s;
		int X, Y;
		if (s.front() == 'B') X = 1;
		else if (s.front() == 'S') X = 2;
		else if (s.front() == 'G') X = 3;
		else if (s.front() == 'P') X = 4;
		else X = 5;
		Y = stoi(s.substr(1, s.length() - 1));
		A[i] = B[i] = make_pair(X, -Y);
	}

	sort(B, B + N);
	for (int i = 0; i < N; i++) {
		if (A[i] != B[i]) ans.emplace_back(i);
	}
	if (ans.empty()) cout << "OK";
	else {
		cout << "KO\n";
		int x = B[ans.front()].first;
		if (x == 1) cout << 'B';
		else if (x == 2) cout << 'S';
		else if (x == 3) cout << 'G';
		else if (x == 4) cout << 'P';
		else cout << 'D';
		cout << -B[ans.front()].second << ' ';

		x = B[ans.back()].first;
		if (x == 1) cout << 'B';
		else if (x == 2) cout << 'S';
		else if (x == 3) cout << 'G';
		else if (x == 4) cout << 'P';
		else cout << 'D';
		cout << -B[ans.back()].second << ' ';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 11916 // C++] 볼질  (2) 2024.04.12
[BOJ 27108 // C++] Ordered Fractions  (0) 2024.04.11
[BOJ 12971 // C++] 숫자 놀이  (0) 2024.04.09
[BOJ 13728 // C++] 행렬식과 GCD  (0) 2024.04.08
[BOJ 6646 // C++] Wooden Fence  (1) 2024.04.07

+ Recent posts