๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Coding Test/Programmers

[JAVA] ์ •๋ ฌ Lv.2 / ๊ฐ€์žฅ ํฐ ์ˆ˜

๐Ÿ”—๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/42746

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ฐ€์žฅ ํฐ ์ˆ˜

0 ๋˜๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ •์ˆ˜๋ฅผ ์ด์–ด ๋ถ™์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด ์ฃผ์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„ ์ •์ˆ˜๊ฐ€ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด์ค‘ ๊ฐ€์žฅ ํฐ

programmers.co.kr

 

๐Ÿ“œ๋ฌธ์ œ
0 ๋˜๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ •์ˆ˜๋ฅผ ์ด์–ด ๋ถ™์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด ์ฃผ์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„ ์ •์ˆ˜๊ฐ€ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” 6210์ž…๋‹ˆ๋‹ค.

0 ๋˜๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ˆœ์„œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์–ด return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

๐Ÿ””์ œํ•œ ์‚ฌํ•ญ

  • numbers์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • numbers์˜ ์›์†Œ๋Š” 0 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ •๋‹ต์ด ๋„ˆ๋ฌด ํด ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์–ด return ํ•ฉ๋‹ˆ๋‹ค.

 

 ๐Ÿ“ํ’€์ด ๊ณผ์ •

  ์ฃผ์–ด์ง„ ์ •์ˆ˜๋ฅผ ์ด์–ด ๋ถ™์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ฌธ์ œ์ธ๋ฐ, ๊ฐ€์žฅ ์•ž์ž๋ฆฌ์— ์ž๋ฆฌ์ˆ˜๊ฐ€ ํ•œ์ž๋ฆฌ์ธ ํฐ ์ˆ˜๊ฐ€ ์˜ค๋ฉด ์˜ฌ์ˆ˜๋ก ํฐ ์ˆ˜๊ฐ€ ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ฒ˜์Œ ์‹œ๋„๋•Œ ๋‹จ์ˆœํžˆ ์ž๋ฆฌ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹œ๋„ํ–ˆ์œผ๋‚˜ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ ค์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.

numbers๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•œ๋’ค, ์ •๋ ฌํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ answer์— ๋ถ™์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค
์ด์ค‘ ๋ˆˆ์—ฌ๊ฒจ ๋ด์•ผํ• ๊ฒƒ์€ Comparator์ด๋‹ค

Comparator : ๊ฐ์ฒด ๊ฐ„์˜ ํŠน์ •ํ•œ ์ •๋ ฌ์ด ํ•„์š”ํ•  ๋•Œ, Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•ด์„œ ํŠน์ • ๊ธฐ์ค€์„ ์ •์˜ํ•˜๋Š” compare() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
(์ผ๋ฐ˜์ ์ธ ์ •๋ ฌ์ด ํ•„์š”ํ• ์‹œ Comparable ์‚ฌ์šฉ)

a.compareTo(b)
 -์•ž์—์„œ๋ถ€ํ„ฐ ๋น„๊ตํ•˜๋‹ค ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ด ๋‚˜์˜ค๋ฉด 'a-b' ์ˆœ์„œ๋กœ ํ•ด๋‹น ๋ฌธ์ž์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ๋บ€ ๊ฒฐ๊ณผ(int)๋ฅผ ๋ฆฌํ„ด
 ๋‚ด๋ฆผ์ฐจ์ˆœ : (o2+o1).compareTo(o1+o2);
 ์˜ค๋ฆ„์ฐจ์ˆœ : (o1+o2).compareTo(o1+o2);

arr์„ ์ •๋ ฌํ•œ๋’ค arr์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์ด 0 ์ธ์ง€ ์•„๋‹Œ์ง€ (์ฃผ์–ด์ง„ ์ˆ˜๊ฐ€ ๋ชจ๋‘ 0์ธ ๊ฒฝ์šฐ) ํŒ๋ณ„ํ•œ๋’ค,
arr์•ˆ์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ answer์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋.

๐Ÿ’ป์ฝ”๋“œ

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        
        //1
        String[] arr = new String [numbers.length];
        for(int i=0; i<numbers.length; ++i){
            arr[i]= String.valueOf(numbers[i]);
        }
        
        //2
        Arrays.sort(arr,new Comparator<String>(){
            
            @Override
            public int compare(String s1, String s2){
                return ((s2+s1).compareTo(s1+s2));      //๋‘ String์„ ํ•ฉ์ณ์„œ ํฐ ์ชฝ์ด ์šฐ์„ ์ˆœ์œ„ ์žˆ๋„๋ก
            }
            
        });
		
        //3
        if(arr[0].equals("0")){		//0์œผ๋กœ ์ด๋ค„์ ธ์žˆ์„๊ฒฝ์šฐ 
            return "0";
        }
        
        for(String a: arr){         
            answer += a;
        }     
                
        return answer;
    }
}