[문제 위치]
https://www.acmicpc.net/problem/7596
[문제 풀이]
이 문제는 정렬(대소문자 무시 비교) 를 통해 해결하는 문제이다.
각 테스트마다 n개의 노래 제목을 받아서 알파벳 순(대소문자 구분 없이)으로 정렬해야 하므로 문자열을 읽은 뒤 대소문자를 무시하는 비교 함수를 이용해서 정렬하고, 케이스 번호(1부터 증가)를 한 줄로 출력한 다음 정렬된 제목들을 그대로 출력하는 방식으로 간단하게 해결한다
아래는 이를 구현한 코드이다.
#include <bits/stdc++.h>
using namespace std;
#define FASTIO ios::sync_with_stdio(false); cin.tie(nullptr);
// 대소문자 무시 비교 (tie-breaker로 원문 사전순 사용)
bool ciLess(const string& a, const string& b) {
size_t i = 0, na = a.size(), nb = b.size();
while (i < na && i < nb) {
unsigned char ca = (unsigned char)a[i];
unsigned char cb = (unsigned char)b[i];
char la = tolower(ca), lb = tolower(cb);
if (la != lb) return la < lb;
++i;
}
if (na != nb) return na < nb; // 접두 관계면 짧은 쪽이 먼저
return a < b; // 완전히 같으면 원문 기준으로 결정
}
int main() {
FASTIO;
int n, tc = 0;
while ( (cin >> n) ) {
if (n == 0) break;
string dummy; getline(cin, dummy); // 남은 개행 제거
vector<string> v(n);
for (int i = 0; i < n; ++i) getline(cin, v[i]);
stable_sort(v.begin(), v.end(), ciLess);
cout << ++tc << '\n';
for (const string& s : v) cout << s << '\n';
}
return 0;
}'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
| [Silver V] 불사조 - 31780 (0) | 2025.11.01 |
|---|---|
| [Silver V] Photoshoot - 18323 (0) | 2025.11.01 |
| [Silver V] Slice String - 30034 (0) | 2025.10.27 |
| [Silver V] 뚜기뚜기메뚜기 - 10545 (0) | 2025.10.27 |
| [Silver V] 5학년은 다니기 싫어요 - 23028 (1) | 2025.10.27 |