문제
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include<iostream>
#include<queue>
#include<string>
int main() {
std::string s;
std::priority_queue<char> queue;
std::cin >> s;
for (int i = 0; i < s.size(); ++i) {
queue.emplace(s[i]);
}
while (queue.empty() == false) {
std::cout << queue.top();
queue.pop();
}
}
|
후기
이 문제를 해결하기 위한 키워드는 우선순위 큐이다.
일단 이 문제는 각 자리수마다 숫자를 정렬하는 문제이다. 하지만 이렇게 문제를 풀 경우 한가지 난관에 접하게된다.
그 난관은 바로 자릿수문제이다. 한자리 한자리 입력을 받는게 아닌 큰 정수 하나를 받기 때문에 이걸 나눠서 하던지 어떠한
방법을 사용해서 나눠야 한다.
그래서 나는 그러한 방법대신에 문자열로 입력을 받고 그 문자열의 문자를 하나씩 우선순위 큐에 넣었다.
매번 값을 넣을 때마다 정렬을 하는것은 속도에 영향이 가기 때문에 Heap 자료구조를 사용해서 정렬를 할 수 있도록 하였으며
문자도 결국 숫자로 이루어져있기 때문에 정렬을 하면 동일한 결과를 얻을 수 있다.
출처 및 레퍼런스
문제 링크: https://www.acmicpc.net/problem/1427
관련 글
[자료구조 알고리즘/큐(Queue)와 스택(Stack)] - 우선 순위 큐(Priority Queue)
[온라인 코딩/힙(Heap)] - [백준] 1927번 최소 힙
[온라인 코딩/힙(Heap)] - [백준] 11279번 최대 힙
[온라인 코딩/힙(Heap)] - [백준] 11286번 절대값 힙
'온라인 코딩 > 힙(Heap)' 카테고리의 다른 글
[백준] 11286번 절대값 힙 (0) | 2020.06.11 |
---|---|
[백준] 1927번 최소 힙 (0) | 2020.03.13 |
[백준] 11279번 최대 힙 (0) | 2020.03.09 |
[프로그래머스] 더 맵게 (0) | 2020.02.20 |