[c++]백준1427번:소트인사이드

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