BOJ 1427 - 소트인사이드 문제풀이
문제를 읽고 이해하기
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
재정의와 추상화
입력 예제를 보면, 평소와는 다르게 수를 2143 이와 같이 붙여서 쓴다. 이 경우, 일반적으로 cin >> (int variable)을 쓸 경우 2, 1, 4, 3이 따로 들어가는 것이 아니라 2143 뭉텅이로 하나의 수로 들어가게 된다.
이러한 문제를 해결하기 위해서는 두 가지 방법이 존재한다.
- 입력을 문자열로 받아 string형 변수에 저장한다.
- scanf("%1d", &(int variable));을 사용한다.
둘 다 사용 가능하지만, 필자는 1번을 사용해서 문제를 풀었다. 코드가 훨씬 쉽고 짧을 것이라고 예상했기 때문이다.
나아가, 문제는 이 각 자리수를 내림차순으로 정렬하라고 하였다. sort 함수는 기본적으로 오름차순으로 정렬하므로 세 번째 매개변수로 내림차순을 구현해주는 comp 함수를 전달해주자.
sort 함수에 string을 사용하면, 알파벳으로 구성된 문자열일 경우에는 '사전순'으로 정렬해준다는 점을 알고 있을 것이다. 이는 숫자로 구성된 문자열일 경우에도 동일한 원리가 적용되기 때문에 sort 함수 한 줄로 문제를 해결할 수 있다.
코드 작성
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool comp(int a, int b) {
return a > b;
}
int main() {
string input;
cin >> input;
sort(input.begin(), input.end(), comp);
for (char i : input)
cout << i;
return 0;
}
'알고리즘 > 문제풀이' 카테고리의 다른 글
BOJ 11279 - 최대 힙 문제풀이 (2) | 2020.03.25 |
---|---|
BOJ 1927 - 최소 힙 문제풀이 (0) | 2020.03.25 |
BOJ 1181 - 단어 정렬 문제풀이 (0) | 2020.03.25 |
BOJ 1026 - 보물 문제풀이 (0) | 2020.03.25 |
BOJ 11286 - 절댓값 힙 문제풀이 (0) | 2020.03.19 |
댓글
이 글 공유하기
다른 글
-
BOJ 11279 - 최대 힙 문제풀이
BOJ 11279 - 최대 힙 문제풀이
2020.03.25 -
BOJ 1927 - 최소 힙 문제풀이
BOJ 1927 - 최소 힙 문제풀이
2020.03.25 -
BOJ 1181 - 단어 정렬 문제풀이
BOJ 1181 - 단어 정렬 문제풀이
2020.03.25 -
BOJ 1026 - 보물 문제풀이
BOJ 1026 - 보물 문제풀이
2020.03.25