https://www.acmicpc.net/problem/1427
1427번: 소트인사이드
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
가장먼저 떠오른 방법
:
int 형 정수로 일단 숫자 하나를 입력받고,
그 정수를 뒤에서부터 하나씩 숫자를 떼서 다시 벡터에 저장한 다음
숫자 하나하나가 저장된 벡터를 내림차순 정렬하여 출력하기
그냥 내 머릿속에 가장 먼저 떠오른 간단한 방식이었다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <cmath> //C++
#include <algorithm>
using namespace std;
int main(int argc, char** argv)
{
vector<int> A;
int n;
cin >> n;
while (n > 0) {
A.push_back(n % 10); // 뒤에서부터 한숫자씩 떼어서 벡터에 저장
n /= 10;
}
sort(A.begin(), A.end(), greater<>()); // 내림차순 정렬
for (int i = 0; i < A.size(); i++) {
cout << A[i];
}
return 0;
}
다르게 접근해본 방법
:
하나하나 떼어서 새로운 공간에 저장하는 방법보다 ,
하나하나 떼지 않고도 입력받은 그대로 내림차순 정렬할 수 있는 방법은 없을까? 하여
첫번째 방법으로 풀고나서 추후에 열심히 다른 자료들을 구글링했다.
놀랍게도 , 단 4줄의 코드로 가능한 매우 간단한 방법이 있었다.
바로 string으로 입력받고 출력하되,
sort()안에서 3번째 인자에 해당하는, 내림차순 정렬할때 사용하는 ' greater<type>() '에서
type을 char로 지정해주면 하나하나씩 숫자를 떼어내지 않고도 간편하게 정렬이 되었다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <cmath> //C++
#include <algorithm>
using namespace std;
int main(int argc, char** argv)
{
string A;
cin >> A; // 문자열로 입력받기
sort(A.begin(), A.end(), greater<char>()); // greater<type>() 에서 type의 크기만큼 내림차순 정렬
cout << A;
return 0;
}
깨달은 점
:
내림차순 정렬은 입력받은 자료형과 다른 크기로 진행할 수 있다. ( ex - string -> char로 정렬 )
'코딩테스트 공부' 카테고리의 다른 글
[c++]백준1920번: 수 찾기 (0) | 2023.09.12 |
---|---|
[c++]백준1158번:요세푸스 문제 (0) | 2023.09.10 |
[c++]백준11098번:첼시를 도와줘! (0) | 2023.08.27 |
[c++] 벡터 (0) | 2023.07.08 |