백준

백준 : 5648번 역원소 정렬 c++

TIN9 2023. 7. 27.
반응형

백준 링크

https://www.acmicpc.net/problem/5648

 

5648번: 역원소 정렬

모든 원소가 양의 정수인 집합이 있을 때, 원소를 거꾸로 뒤집고 그 원소를 오름차순으로 정렬하는 프로그램을 작성하세요. 단, 원소를 뒤집었을 때 0이 앞에 선행되는 경우는 0을 생략해야합니

www.acmicpc.net

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 3177 1353 1137 42.809%

문제

모든 원소가 양의 정수인 집합이 있을 때, 원소를 거꾸로 뒤집고 그 원소를 오름차순으로 정렬하는 프로그램을 작성하세요.

단, 원소를 뒤집었을 때 0이 앞에 선행되는 경우는 0을 생략해야합니다.

입력

첫 번째로 입력되는 건 n (1 ≤ n ≤ 106)으로 사용자가 뒤이어 입력할 원소값을 결정합니다. 입력하는 줄에는 하나의 원소값 뿐만 아니라 여러 원소값도 들어갈 수 있습니다.

단, 입력하는 정수는 1012을 넘어선 안 됩니다.

출력

출력문은 위 문제 내용에 나와있는 정렬방법으로 정렬하여 아래 예제 출력을 참고하여 출력하세요.

예제 입력 1

10 5 2233
1601 90100 13009 802
50000000
301 7654321
210

예제 출력 1

5
5
12
103
109
208
1061
3322
90031
1234567

코드 풀이

이번 문제는 입력으로 주어진 문자열을 뒤집어 정수값으로 바꾼 뒤 오름차순 정렬하여 출력하는 문제입니다.

그래서 문자열을 뒤집고 정수로 변환하는 ConvertFunc() 함수를 만들고 반환된 ConvertNumb값을 벡터에 저장하여

해당 벡터를 정렬 후 출력하는 방식으로 구현했습니다.

1. n개의 반복문을 돌면서 string에 입력값을 넣은 뒤 바로 ConvertFunc() 실행

2. ConvertFunc에서 매개변수로 들어온 String값을 reverser를 이용하여 뒤집은 뒤 stoll을 이용하여 long long으로 변환 후 리턴

3. n개 전부 벡터에 저장을 했으면 sort함수를 이용하여 오름차순 정렬

4. 출력

코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

long long ConvertFunc(string& _String)
{
    long long ConvertNumb = 0;

    reverse(_String.begin(), _String.end());

    ConvertNumb = stoll(_String);

    return ConvertNumb;
}

int main()
{
    int n = 0;

    cin >> n;

    vector<long long> vecConvertNumb(n);

    for (int i = 0; i < n; ++i)
    {
        string S;
        cin >> S;
        vecConvertNumb[i] = ConvertFunc(S);
    }

    sort(vecConvertNumb.begin(), vecConvertNumb.end());

    for (int i = 0; i < n; ++i)
    {
        cout << vecConvertNumb[i] << '\n';
    }

    return 0;
}
반응형

댓글