컴퓨터/LeetCode

LeetCode 937 Reorder Data in Log File Medium [Java]

이상한 나그네 2023. 12. 27. 01:03

문제: https://leetcode.com/problems/reorder-data-in-log-files/

 

Reorder Data in Log Files - LeetCode

Can you solve this real interview question? Reorder Data in Log Files - You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier. There are two types of logs: * Letter-logs: All words (except the

leetcode.com

1. 코드

class Solution {
    public String[] reorderLogFiles(String[] logs) {
        List<String> digit = new ArrayList<>();
        List<String> letter = new ArrayList<>();

        for(String log : logs) {
            if(log.split(" ")[1].matches("[0-9]+"))
                digit.add(log);
            else
                letter.add(log);
        }
        Collections.sort(letter, (a, b) -> {
            String[] s1 = a.split(" ");
            String[] s2 = b.split(" ");
            
            int compared = s1[1].compareTo(s2[1]);
            if(compared == 0)
                compared = s1[2].compareTo(s2[2]);
            if(compared == 0)
                compared = s1.length - s2.length;
            return compared == 0 ? s1[0].compareTo(s2[0]) : compared;
        });

        letter.addAll(digit);
        return letter.toArray(new String[0]);
    }
}

2. 설명

숫자 로그인지 문자로 구성된 로그인지 구분하여 각각의 리스트로 분리한 뒤 문자로 로그끼리 비교하여 사전순으로 하는데 만약 index 기준 2번째 문자까지 동일하다면 로그의 문자 수를 비교 후 동일하다면 식별자를 비교한다.

해당 문제에 대한 규칙을 잘알고 있으면 해결할 수 있다.