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

 

이번에 볼 문제는 백준 32788번 문제인 Big Integers이다.
문제는 아래 링크를 확인하자.

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

 

두 수 모두 0으로 시작하지 않고 두 수는 서로 다르므로, (1)길이가 다르면 더 긴 수가 항상 더 크고 (2) 길이가 같다면 첫 문자부터 비교해나가면서 처음으로 서로 다른 문자가 나왔을 때의 그 두 문자 중 더 큰 수를 나타내는 쪽이 더 큰 수가 됨을 관찰하자.

 

한편 아스키코드에서는 (숫자) < (대문자) < (소문자) 순으로 코드가 할당되어 있으므로, 각 대문자와 소문자를 뒤바꿔주면 위의 (2) 과정은 단순 문자열비교로 판단 가능하게 된다.

 

위의 관찰을 이용해 문제를 해결하자.

 

#include <iostream>
#include <utility>
using namespace std;

int T;
string A, B;

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

	cin >> T;
	while (T--) {
		cin >> A >> B;
		if (A > B) swap(A, B);
		for (auto &l:A) {
			if ('a' <= l && l <= 'z') l = toupper(l);
			else if ('A' <= l && l <= 'Z') l = tolower(l);
		}
		for (auto &l:B) {
			if ('a' <= l && l <= 'z') l = toupper(l);
			else if ('A' <= l && l <= 'Z') l = tolower(l);
		}
		
		if (A.length() > B.length()) cout << "NO\n";
		else if (A.length() < B.length()) cout << "YES\n";
		else {
			bool chk = 1; int alen = A.length();
			for (int i = 0; i < alen; i++) {
				if (A[i] > B[i]) {
					chk = 0;
					break;
				}
				else if (A[i] < B[i]) break;
			}
			if (chk) cout << "YES\n";
			else cout << "NO\n";
		}
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 32710 // C++] 구구단표  (0) 2024.11.28
[BOJ 32791 // C++] Exact Change  (0) 2024.11.27
[BOJ 32795 // C++] Intuitive Elements  (0) 2024.11.25
[BOJ 32686 // C++] DPS  (0) 2024.11.22
[BOJ 32685 // C++] 4-LSB  (0) 2024.11.21

+ Recent posts