my study.

Coding Test/Softeer

[소프티어] GPT식 숫자 비교, java

fftl 2025. 2. 7. 03:42

- 문제

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

- 풀이

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        //BufferedReader를 이용해 입력을 받아줍니다.
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        //우선적으로 테스트케이스 개수를 받아줍니다.
        int tc = Integer.parseInt(br.readLine());

        //문제의 핵심입니다. 소수점을 기준으로 각각 좌우 모두가 오름차순으로 정렬이 되어야 하기 때문에,
        //우선순위 큐를 이용하여 두 가지 정렬조건을 적용해주었습니다.
        PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>(){
            @Override
            public int compare(int[] a, int[] b){
                if(a[0]==b[0]){
                    return a[1]-b[1];
                } else {
                    return a[0]-b[0];
                }
            }
        });

        //이제 실제 데이터를 한 줄씩 받아옵니다.
        for(int i=0; i<tc; i++){

            //받아온 수를 소수점을 기준으로 잘라줍니다.
            String[] now = br.readLine().split("\\.");

            //그리고 정수, 소수점 부분을 각각 받아줄 front, back을 미리 선언해줍니다.
            int front, back;

            //소수점이 존재하지 않을 경우는 now.length == 1을 통해서 판단할 수 있습니다.
            if(now.length == 1){
                front = Integer.parseInt(now[0]); //정수 부분은 존재하는 수를 그대로 넣어주고,
                back = -1;                        //해당 정수중 가장 앞에 위치해야 하므로 -1을 입력하여 정렬에 사용합니다.

            //소수점이 존재하는 경우입니다.
            } else {
                front = Integer.parseInt(now[0]); //정수 부분을 입력해주고,
                back = Integer.parseInt(now[1]);  //소수 부분을 입력해줍니다.
            }

            //이렇게 만들어진 front, back을 담은 int[]배열을 pq에 넣어 정렬이 되도록 합니다.
            pq.add(new int[]{front, back});
        }

        //출력하는 값은 StringBuilder에 넣어 출력하기 위해 StringBuilder를 만들어줍니다.
        StringBuilder sb = new StringBuilder();

        //이제 정렬이 완료된 pq에서 하나씩 값을 꺼내어주며 sb를 채워줍니다.
        while(!pq.isEmpty()){

            //이번에 꺼낸 수 now 입니다.
            int[] now = pq.poll();

            //만약 소수점의 수가 -1이라면,
            if(now[1] == -1){

                //소수점은 없다는 표시이므로 정수만 입력하여 추가해줍니다.
                sb.append(now[0]+"\n");

            //소수점의 수가 0이상 이라면,
            } else {

                //정수와 ".", 그리고 소수자리 수를 연결시켜 추가해줍니다.
                sb.append(now[0]+"."+now[1]+"\n");
            }
        }

        //이렇게 만들어진 sb를 답안으로 제출합니다.
        System.out.println(sb.toString().trim());
    }
}