728x90
반응형
SMALL
백준 문제 풀이: 16496 [큰 수 만들기]
문제 링크: https://www.acmicpc.net/problem/16496
문제 설명:
주어진 숫자들을 조합하여 만들 수 있는 가장 큰 수를 찾는 문제입니다.
각 숫자를 문자열로 정렬하며, 두 문자열 a
, b
를 비교할 때 a + b
와 b + a
를 비교하여 더 큰 값이 앞에 오도록 정렬하면 됩니다.
문제 해결 코드
#include <iostream>
#include <algorithm>
using namespace std;
string arr[1001];
// 두 숫자를 조합하여 큰 순서대로 정렬
bool compare(string a, string b) {
return a + b > b + a;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n; // 숫자 개수 입력
for (int i = 0; i < n; i++) {
cin >> arr[i]; // 숫자 입력
}
sort(arr, arr + n, compare); // 정렬 수행
string ans = "";
for (int i = 0; i < n; i++) {
ans += arr[i]; // 정렬된 순서대로 문자열 결합
}
// 앞자리가 0이면 제거 (0000 방지)
while (true) {
if (ans[0] == '0') {
ans = ans.substr(1);
} else {
break;
}
}
// 모든 숫자가 0이면 0 하나만 출력
if (ans == "") {
cout << 0 << '\n';
} else {
cout << ans << '\n';
}
}
예제 입력:
3
3 30 34
예제 출력:
34330
코드 설명
- 핵심 알고리즘: 문자열 비교 정렬을 활용한 큰 수 조합
- 구현 세부사항:
- 숫자를 문자열로 입력받고, 정렬 기준을
a + b > b + a
로 설정 - 정렬된 결과를 하나의 문자열로 결합
- 앞자리가 0이면 제거하여 "0000" 같은 경우를 방지
- 숫자를 문자열로 입력받고, 정렬 기준을
- 시간 복잡도: O(N log N), 정렬 수행 시간
결과
주어진 숫자들을 조합하여 만들 수 있는 가장 큰 수를 효율적으로 계산합니다. 문자열 정렬을 활용한 문제 해결을 연습하기 좋은 문제입니다. 추가적인 질문이나 개선 사항이 있다면 댓글로 알려주세요!
728x90
반응형
LIST
'BAEKJOON > 그리디' 카테고리의 다른 글
백준 1744번 [수 묶기](C++) -yes6686- 티스토리 (0) | 2025.07.07 |
---|---|
백준 11000번 [강의실 배정](C++) -yes6686- 티스토리 (0) | 2025.07.07 |
백준 2212번 [센서](C++) -yes6686- 티스토리 (0) | 2025.02.06 |
백준 3061번 [사다리](C++) -yes6686- 티스토리 (0) | 2025.01.11 |
프로그래머스 [탐욕법(Greedy)] 체육복(C++) -yes6686- 티스토리 (0) | 2025.01.08 |