컴굥일지

[BOJ/백준 5648][C++] 역원소 정렬 본문

알고리즘/코테 문제

[BOJ/백준 5648][C++] 역원소 정렬

gyong 2023. 7. 9. 00:02
반응형

문제

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

백준 5648

 

문제 내용

숫자를 여러 개 입력받아, 각 숫자를 거꾸로 뒤집고, 이 숫자들을 정렬하여 출력하면 된다.

이때 주의해야 할 점은, 숫자는 10^12의 범위까지이므로 long long 자료형을 사용해야 하며, 뒤집었을 때 앞에 0이 오면 그 0은 생략해야 한다는 점이다.

 

문제 풀이

아래 과정을 거치면 된다.

1. 숫자를 "문자열"로 입력받는다. (숫자로 입력받아도 되지만, 어차피 문자열로 다시 바꿔야 한다.)

2. reverse()를 통해 문자열을 뒤집고, 그 문자열을 숫자로 바꾼다.

3. 배열에 집어넣는다.

각 원소별로 위의 과정을 거친 후, 배열에 모든 원소가 들어가면 정렬 후 출력하면 된다.

 

 

코드

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

using namespace std;

long long reverseNum(string str) {
    reverse(str.begin(), str.end());
    return stoll(str);
}

int main() {
    int n;
    cin >> n;
    vector<long long> arr;

    string num;
    for (int i = 0; i < n; i++) {
        cin >> num;
        arr.push_back(reverseNum(num));
    }
    sort(arr.begin(), arr.end());

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

 

문제 코드 설명

1. 숫자를 문자열로 바꾸는 함수

  • to_string(num)

2. 문자열을 숫자로 바꾸는 함수

  • str -> int : stoi(str)
  • str -> double : stod(str)
  • str -> long long : stoll(str)

위 두 경우 모두 <string> 헤더를 포함시켜야 한다.

반응형
Comments