๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ๊ฐ€์žฅ ํฐ ์ˆ˜

by carrot0911 2025. 4. 1.

๋ฌธ์ œ ์„ค๋ช…

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

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 return
[6, 10, 2] "6210"
[3, 30, 34, 5, 9] "9534330"

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        // ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  StringBuilder๋ฅผ ์ƒ์„ฑ
        StringBuilder sb = new StringBuilder();

        // int ๋ฐฐ์—ด์„ String ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
        String[] stringNums = Arrays.stream(numbers)
                .mapToObj(String::valueOf)
                .toArray(String[]::new);

        // ๋ฌธ์ž์—ด์„ ๋”ํ•œ ๊ฐ’์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ(๋‚ด๋ฆผ์ฐจ์ˆœ)
        Arrays.sort(stringNums, (a, b) -> (b + a).compareTo(a + b));

        // ๋งŒ์•ฝ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด "0"์ธ ๊ฒฝ์šฐ
        if (stringNums[0].equals("0")) {
            // "0" ๋ฐ˜ํ™˜
            return "0";
        }
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด ์ˆœ์„œ๋Œ€๋กœ ์ด์–ด ๋ถ™์ด๊ธฐ
        for (String s : stringNums) {
            sb.append(s);
        }

        // StringBuilder ๊ฐ’์„ String์œผ๋กœ ๋ณ€ํ™˜
        String answer = sb.toString();
    
        // answer ๋ฐ˜ํ™˜
        return answer;
    }
}

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ

  • ์ฒ˜์Œ ์ƒ๊ฐํ–ˆ๋˜ ๋ฐฉํ–ฅ์€ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์กฐํ•ฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’ ๋ชจ๋‘ ์ถ”๊ฐ€ ํ›„ ๋‚ด๋ฆผ์ฐจ์ˆœ/์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„ answer์— ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
    ํ•˜์ง€๋งŒ ์กฐํ•ฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ๋ชจ๋‘ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์ด ๋น„ํšจ์œจ์ ์ด๋ผ๋Š” ์ƒ๊ฐ๊ณผ ํ•จ๊ป˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜๋‹ค.
  • ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฌธ์ œ์˜ ํžŒํŠธ๋ฅผ ์–ป์–ด compareTo() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ  ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.