wooing

[Softeer/문자열] GPT식 숫자 비교 본문

알고리즘

[Softeer/문자열] GPT식 숫자 비교

우잉_ 2025. 2. 3. 14:00

문제

https://softeer.ai/practice/11001

 

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

 

softeer.ai

 

해결방법

이 문제를 해결하기 위한 포인트는 배열 정렬하는 Comparator구현이다. 입력받은 값을 String[]로 저장하고, Arrays.sort메소드와 Comparator람다 함수를 직접 정의하여 쉽게 해결 가능하다.

Comparator람다 함수 내부에는 다음과 같은 과정을 구현하면 된다.

  •  소수점 기준으로 좌우 숫자 분리
  • 좌측 숫자 비교
  • 우측 숫자 유무 확인
  • 우측 숫자 비교

이때 소수점 좌우 분리 과정에서 .split("")메소드 안의 정규식에 주의해야한다. 정규식에서 "."은 모든값을 의미하기때문에 원하는 결과를 얻을 수 없다. "."대신 "\\."으로 입력하여야한다.

소스코드

더보기
import java.io.*;
import java.util.*;

public class Main {
    static int N;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        String[] arr = new String[N];
        for(int i =0; i < N; i++){
            arr[i] = br.readLine();
        }

        Arrays.sort(arr, (a, b) -> {
            String[] aList = a.split("\\.");
            String[] bList = b.split("\\.");

            int aLeft = Integer.parseInt(aList[0]);
            int bLeft = Integer.parseInt(bList[0]);
            int leftResult = aLeft - bLeft;
            if(leftResult != 0)
                return leftResult;

            int aSize = aList.length;
            int bSize = bList.length;
            int sizeResult = aSize - bSize;
            if(aSize < 2 || bSize < 2)
                return sizeResult;
            
            return Integer.parseInt(aList[1]) - Integer.parseInt(bList[1]);
        });

        StringBuilder builder = new StringBuilder();
        for(String s : arr){
            builder.append(s + "\n");
        }
        System.out.print(builder.toString());
        
    }
}

'알고리즘' 카테고리의 다른 글

[Softeer/DP, DFS] 효도 여행  (0) 2025.02.07
[Softeer/DP] 징검다리  (2) 2025.02.04
[Softeer/비트마스크] CPTI  (0) 2025.02.03
[코드트리/완전탐색] 금 채굴하기  (1) 2025.01.21
[코드트리/완전탐색] 트로미노  (0) 2025.01.21