๋šœ๋ถ€๋‹ˆ์˜ Devlog

[Programmers] ํŒŒ์ผ๋ช… ์ •๋ ฌ (Java)

by ๋šœ๋ถ€๋‹ˆ

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - [3์ฐจ] ํŒŒ์ผ๋ช… ์ •๋ ฌ

ํŒŒ์ผ๋ช… ์ •๋ ฌ ์„ธ ์ฐจ๋ก€์˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์™€ ๋‘ ์ฐจ๋ก€์˜ ๋ฉด์ ‘์ด๋ผ๋Š” ๊ธฐ๋‚˜๊ธด ๋ธ”๋ผ์ธ๋“œ ๊ณต์ฑ„๋ฅผ ๋ฌด์‚ฌํžˆ ํ†ต๊ณผํ•ด ์นด์นด์˜ค์— ์ž…์‚ฌํ•œ ๋ฌด์ง€๋Š” ํŒŒ์ผ ์ €์žฅ์†Œ ์„œ๋ฒ„ ๊ด€๋ฆฌ๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ์ €์žฅ์†Œ ์„œ๋ฒ„์—๋Š” ํ”„๋กœ๊ทธ๋žจ

programmers.co.kr

์ด ๋ฌธ์ œ๋Š” ํŒŒ์ผ๋ช…์„ ํŠน์ • ์กฐ๊ฑด์— ๋งž์ถฐ ์ž๋ฅธ ํ›„ ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ๋กœ,

์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ HEAD, NUMBER, TAIL๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ฌธ์ž, ์ฒ˜์Œ ๋“ฑ์žฅํ•˜๋Š” ์ˆซ์ž, ์ตœ๋Œ€ ๊ธธ์ด 5, ๋ฌธ์ž๋กœ HEAD, NUMBER, TAIL์„ ๋‚˜๋ˆ„๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

 

HEAD ๋ถ€๋ถ„ ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์ „์ˆœ ์ •๋ ฌ์„ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ ๋Œ€์†Œ๋ฌธ์ž๋Š” ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ, HEAD ๋ถ€๋ถ„์˜ ๋ฌธ์ž๊ฐ€ MUZI, muzi์™€ ๊ฐ™์€ ํ˜•ํƒœ๋ผ๋ฉด ๋™์ผํ•œ ์ˆœ์„œ๋กœ ์ทจ๊ธ‰๋˜๋ฏ€๋กœ NUMBER๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

NUMBER๊ฐ€ 00001๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋ผ๋ฉด, ์•ž์˜ 0์€ ๋ฌด์‹œ๋˜๋ฉฐ 1๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๊ณ„์‚ฐ์„ ํ•ฉ๋‹ˆ๋‹ค. (intํ˜•์œผ๋กœ ๋ณ€๊ฒฝ)

๋งŒ์•ฝ, HEAD ๋ถ€๋ถ„๊ณผ NUMBER์˜ ์ˆซ์ž๊ฐ€ ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด, ์›๋ž˜ ์ž…๋ ฅ์— ์ฃผ์–ด์ง„ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„, ๋ณ€๊ฒฝ๋œ ์ˆœ์„œ์— ๋งž์ถฐ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

์กฐ๊ฑด์— ๋”ฐ๋ฅธ ์ •๋ ฌ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Comparator๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋“ค์–ด์˜ค๋Š” ๋‘ ๋ฌธ์ž์— ๋Œ€ํ•ด ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ž๋ถ€๋ถ„๋งŒ ๊ฐ€์ ธ์˜ค๋ฉด ๋˜๋ฏ€๋กœ

์ •๊ทœ์‹ ํ‘œํ˜„์„ ์ด์šฉํ•ด ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž˜๋ผ์ค€ ํ›„ 0๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๊ทธ ํ›„ compareTo๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๊ต๋ฅผ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•ด์ค๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ๋œ ์†Œ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜์˜€์„ ๋•Œ,

๋ฌธ์ž1 > ๋ฌธ์ž2์ธ ๊ฒฝ์šฐ ์–‘์ˆ˜, ๋ฌธ์ž1 < ๋ฌธ์ž2์ธ ๊ฒฝ์šฐ ์Œ์ˆ˜, ๋ฌธ์ž1==๋ฌธ์ž2์ธ ๊ฒฝ์šฐ 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

0์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋ฆฌํ„ด์‹œํ‚ค๋ฉด, Comparator๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์–‘์ˆ˜๋ผ๋ฉด ์ž๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฒ ์ฃ !

๊ทธ๋Ÿฌ๋‚˜ 0์ธ ๊ฒฝ์šฐ์—๋Š” ์ˆซ์ž์— ๋Œ€ํ•œ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

HEAD ๊ธธ์ด๋งŒํผ ์ œ์™ธ์‹œํ‚จ ๋‹ค์Œ, ์ˆซ์ž์— ๋Œ€ํ•ด์„œ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ 5๊ฐ€ ๋ ๋•Œ๊นŒ์ง€ ์ฐพ์Šต๋‹ˆ๋‹ค.

๊ทธ ํ›„, ์ฐพ์€ ์ˆซ์ž(๋ฌธ์ž์—ด ํ˜•ํƒœ)๋ฅผ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ฐ˜ํ™˜๋œ ๋‘ ์ˆซ์ž๋ฅผ ๋น„๊ตํ•˜์—ฌ Comparator๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import java.util.*;

class Solution {
    public String[] solution(String[] files) {
        String[] answer = {};
        
        // ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ์ •๋ ฌ์„ ํ•˜๊ธฐ ์œ„ํ•ด Comparator ๊ตฌํ˜„
        // compare ๋ฆฌํ„ด๊ฐ’์ด ์–‘์ˆ˜๋ฉด ๋‘ ๊ฐ์ฒด์˜ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊ฟ”์คŒ
        Arrays.sort(files, new Comparator<String>(){
            @Override
            public int compare(String o1, String o2) {
                // ์ˆซ์ž ์•ž๋ถ€๋ถ„์„ ์ž˜๋ผ์„œ head ์ƒ์„ฑ
                String head1 = o1.split("[0-9]")[0];
                String head2 = o2.split("[0-9]")[0];
                
                // compareTo๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๊ต๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ ํ›„ ๋น„๊ต
                int result = head1.toLowerCase().compareTo(head2.toLowerCase());
                
                if (result == 0) { // ๊ฐ™์€ ๋ฌธ์ž์ผ ๊ฒฝ์šฐ ์ˆซ์ž๋กœ ๋น„๊ต
                    result = convertNum(o1, head1) - convertNum(o2, head2);
                }
                
                return result;
            }
        });
        
        return files;
    }
    
    public int convertNum(String str, String head) {
        str = str.substring(head.length()); // head ๊ธธ์ด๋งŒํผ ์ž˜๋ผ์„œ ์ˆซ์ž๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์คŒ
        String result = "";
        for (char c : str.toCharArray()) {
            if (Character.isDigit(c) && result.length() < 5) // ์ˆซ์ž์ธ์ง€ ๊ทธ๋ฆฌ๊ณ  result ๊ธธ์ด๊ฐ€ 5๊ฐ€ ์•ˆ ๋„˜๋Š”์ง€ ํ™•์ธ
                result += c;
            else
                break;
        }
        return Integer.valueOf(result);
    }
}

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๋šœ๋ถ€๋‹ˆ์˜ Devlog

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ