본문 바로가기
코딩테스트/백준(BOJ)

[백준] 5648번: 역원소 정렬(JAVA)

by hadgehogdev 2023. 9. 14.

▶ 문제

 

5648번: 역원소 정렬

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

www.acmicpc.net

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

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

입력

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

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

출력

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


▶ 풀이

 - JAVA

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        long[] arr = new long[n];
        StringBuilder sb = new StringBuilder();
        int idx = 0;
        while(idx < n){
            if(st.hasMoreTokens()){
                String str = sb.append(st.nextToken()).reverse().toString();
                arr[idx] = Long.parseLong(str);
                sb.setLength(0);		//sb 초기화
                idx++;
            }
            else
                st = new StringTokenizer(br.readLine());
        }

        Arrays.sort(arr);

        for(int i = 0; i < n; i++)
            sb.append(arr[i]).append("\n");

        System.out.print(sb);
    }
}

▶ 메모

- hasMoreTokens(): StringTokenizer 클래스 객체에서 다음에 읽어 들일 token이 있으면 true, 없으면 false를 리턴한다.

- reverse():  메소드를 호출한 객체(문자열)를 거꾸로 뒤집어 리턴해준다.

 여기서는 StringBuilder 객체를 리턴(StringBuffer로 선언 시, StringBuffer 객체 리턴)하기 때문에, toString() 메소드와 함께 사용한다.