본문 바로가기

문제 풀이/문제 풀이(BOJ)

[Silver V] 역원소 정렬 - 5648

[문제 위치]

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

[문제 풀이]

구현에 관한 문제이다.

모두 입력을 받은 다음 뒤집어주고 선행 0을 제거한 다음 정렬해주면 된다.

정렬의 경우 자주 풀었던만큼 이번문제의 핵심은 숫자를 어떻게 뒤집는가이다.

 

뒤집는 코드는 아래와 같다.

long long reverseNumber(long long num) {
    long long reversed = 0;
    while (num > 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }
    return reversed;
}

이 코드는 num을 10으로 나누어 가장 작은 자릿수를 잘라낸 다음 reverse에 넣는 것이다.

이후 reverse는 10이 곱해져 일의 자릿수를 비워놓은 상태에서 num의 10으로 나눈 값을 받아 뒤집는 것이다.

 

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

using namespace std;

long long reverseNumber(long long num) {
    long long reversed = 0;
    while (num > 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }
    return reversed;
}

int main() {
    int n;
    cin >> n;
    
    vector<long long> numbers(n);
    for (int i = 0; i < n; i++) {
        cin >> numbers[i];
        numbers[i] = reverseNumber(numbers[i]);
    }
    
    sort(numbers.begin(), numbers.end());
    
    for (long long num : numbers) {
        cout << num << endl;
    }

    return 0;
}

'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글

[Silver V] CD - 4158  (0) 2025.05.05
[Silver V] 사탕 - 11256  (0) 2025.05.04
[Silver V] 지뢰 찾기  (0) 2025.05.01
[Silver V] 2021은 무엇이 특별할까?  (0) 2025.05.01
[Silver V] 숫자 빈도수 -14912  (0) 2025.04.24