Contents

κ°€μž₯ 큰 수 (with. Java)

   Jun 9, 2024     2 min read

β€œκ°€μž₯ 큰 수 (with. Java)” λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ νšŒκ³ μ™€ λ‹€λ₯Έ 풀이 방법을 μ•Œμ•„λ³΄λ©°, μ•Œμ•„κ°€κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

0 λ˜λŠ” μ–‘μ˜ μ •μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ •μˆ˜λ₯Ό 이어 λΆ™μ—¬ λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 큰 수λ₯Ό μ•Œμ•„λ‚΄ μ£Όμ„Έμš”.

예λ₯Ό λ“€μ–΄, 주어진 μ •μˆ˜κ°€ [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]λ₯Ό λ§Œλ“€ 수 있고, 이쀑 κ°€μž₯ 큰 μˆ˜λŠ” 6210μž…λ‹ˆλ‹€.

0 λ˜λŠ” μ–‘μ˜ μ •μˆ˜κ°€ λ‹΄κΈ΄ λ°°μ—΄ numbersκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μˆœμ„œλ₯Ό μž¬λ°°μΉ˜ν•˜μ—¬ λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 큰 수λ₯Ό λ¬Έμžμ—΄λ‘œ λ°”κΎΈμ–΄ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • numbers의 κΈΈμ΄λŠ” 1 이상 100,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • numbers의 μ›μ†ŒλŠ” 0 이상 1,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • 정닡이 λ„ˆλ¬΄ 클 수 μžˆμœΌλ‹ˆ λ¬Έμžμ—΄λ‘œ λ°”κΎΈμ–΄ return ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ μ˜ˆμ‹œ

numbersreturn
[6, 10, 2]β€œ6210”
[3, 30, 34, 5, 9]β€œ9534330”

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

import java.util.Arrays;

class Solution {
    public String solution(int[] numbers) {
        String[] answer = new String[numbers.length];

        for(int i = 0; i < numbers.length; i++){
            answer[i] = String.valueOf(numbers[i]);
        }

        Arrays.sort(answer, (m1, m2) -> (m2 + m1).compareTo(m1 + m2));

        if(answer[0].equals("0")){
            return "0";
        }

        return String.join("", answer);
    }
}

풀이 리뷰

solution λ©”μ„œλ“œλŠ” μ •μˆ˜ λ°°μ—΄ numbersλ₯Ό μž…λ ₯으둜 λ°›μŠ΅λ‹ˆλ‹€.

κ²°κ³Όλ₯Ό μ €μž₯ν•  λ¬Έμžμ—΄ λ°°μ—΄ answerλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 이 λ°°μ—΄μ˜ ν¬κΈ°λŠ” numbers λ°°μ—΄μ˜ 길이와 λ™μΌν•©λ‹ˆλ‹€.

for 루프λ₯Ό μ‚¬μš©ν•˜μ—¬ numbers λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ answer 배열에 μ €μž₯ν•©λ‹ˆλ‹€.

Arrays.sort()λ₯Ό μ‚¬μš©ν•˜μ—¬ answer 배열을 μ •λ ¬ν•©λ‹ˆλ‹€. μ •λ ¬ 기쀀은 주어진 μˆ«μžλ“€μ„ μ‘°ν•©ν•˜μ—¬ λ§Œλ“€μ–΄μ§€λŠ” 수의 크기λ₯Ό λΉ„κ΅ν•©λ‹ˆλ‹€.

비ꡐ 기쀀은 두 λ¬Έμžμ—΄μ„ ν•©μ³μ„œ λΉ„κ΅ν–ˆμ„ λ•Œ, 큰 값이 μ•žμ— μ˜€λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€. 즉, m2 + m1κ³Ό m1 + m2λ₯Ό λΉ„κ΅ν•˜μ—¬ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•©λ‹ˆλ‹€.

μ •λ ¬λœ λ°°μ—΄μ˜ 첫 번째 μš”μ†Œκ°€ β€œ0”인 κ²½μš°μ—λŠ” 주어진 μˆ«μžκ°€ λͺ¨λ‘ 0으둜만 κ΅¬μ„±λ˜μ–΄ μžˆλŠ” κ²½μš°μ΄λ―€λ‘œ β€œ0”을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

그렇지 μ•Šμ€ κ²½μš°μ—λŠ” String.join() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •λ ¬λœ 배열을 ν•©μ³μ„œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

이 μ½”λ“œλŠ” 주어진 숫자 배열을 μ‘°ν•©ν•˜μ—¬ λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 큰 수λ₯Ό λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.