※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |