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

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ์ˆซ์ž ์ง๊ฟ

by carrot0911 2025. 1. 23.

๋ฌธ์ œ ์„ค๋ช…

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

 

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

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

programmers.co.kr

๋‘ ์ •์ˆ˜ XY์˜ ์ž„์˜์˜ ์ž๋ฆฌ์—์„œ ๊ณตํ†ต์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜ k(0 ≤ k ≤ 9)๋“ค์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ •์ˆ˜๋ฅผ ๋‘ ์ˆ˜์˜ ์ง๊ฟ์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹จ, ๊ณตํ†ต์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜ ์ค‘ ์„œ๋กœ ์ง์ง€์„ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค). XY์˜ ์ง๊ฟ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด, ์ง๊ฟ์€ -1์ž…๋‹ˆ๋‹ค. XY์˜ ์ง๊ฟ์ด 0์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ง๊ฟ์€ 0์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด,X= 3403์ด๊ณ Y= 13203์ด๋ผ๋ฉด,X์™€Y์˜ ์ง๊ฟ์€X์™€Y์—์„œ ๊ณตํ†ต์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” 3, 0, 3์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ •์ˆ˜์ธ 330์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœX= 5525์ด๊ณ Y= 1255์ด๋ฉดX์™€Y์˜ ์ง๊ฟ์€X์™€Y์—์„œ ๊ณตํ†ต์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” 2, 5, 5๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ •์ˆ˜์ธ 552์ž…๋‹ˆ๋‹ค(X์—๋Š” 5๊ฐ€ 3๊ฐœ,Y
์—๋Š” 5๊ฐ€ 2๊ฐœ ๋‚˜ํƒ€๋‚˜๋ฏ€๋กœ ๋‚จ๋Š” 5 ํ•œ ๊ฐœ๋Š” ์ง ์ง€์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)
๋‘ ์ •์ˆ˜ XY๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, XY์˜ ์ง๊ฟ์„ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 3 ≤ X, Y์˜ ๊ธธ์ด(์ž๋ฆฟ์ˆ˜) ≤ 3,000,000์ž…๋‹ˆ๋‹ค.
  • X, Y๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • X, Y์˜ ์ง๊ฟ์€ ์ƒ๋‹นํžˆ ํฐ ์ •์ˆ˜์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

X Y result
"100" "2345" "-1"
"100" "203045" "0"
"100" "123450" "10"
"12321" "42531" "321"
"5525" "1255" "552"

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • X, Y์˜ ์ง๊ฟ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "-1"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • X, Y์˜ ๊ณตํ†ต๋œ ์ˆซ์ž๋Š” 0์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ์ˆ˜์˜ ์ง๊ฟ์€ ์ •์ˆ˜ 0์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "0"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • X, Y์˜ ์ง๊ฟ์€ 10์ด๋ฏ€๋กœ, "10"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #4

  • X, Y์˜ ์ง๊ฟ์€ 321์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "321"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #5

  • ์ง€๋ฌธ์— ์„ค๋ช…๋œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

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

import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        
        // ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ˆซ์ž๋ฅผ ํ™•์ธํ•ด์„œ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด ์ƒ์„ฑ
        int[] xCntArr = new int[10];
        int[] yCntArr = new int[10];
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ์ˆซ์ž์˜ ์ธ๋ฑ์Šค ์œ„์น˜์— ๊ฐ’ +1
        for (String x : X.split("")) {
            xCntArr[Integer.parseInt(x)]++;
        }
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ์ˆซ์ž์˜ ์ธ๋ฑ์Šค ์œ„์น˜์— ๊ฐ’ +1
        for (String y : Y.split("")) {
            yCntArr[Integer.parseInt(y)]++;
        }
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๊ฐ™์€ ์ˆซ์ž๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ
        for (int i = 9; i >= 0; i--) {
        	// ๋‘˜ ๋‹ค 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋™์‹œ์— ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ˆ˜์ด๋ฏ€๋กœ answer์— ์ถ”๊ฐ€
            while (xCntArr[i] > 0 && yCntArr[i] > 0) {
                answer.append(i);
                
                xCntArr[i]--;
                yCntArr[i]--;
            }
        }
        
        // ์ง๊ฟ์ด ์—†๋‹ค๋ฉด "-1" ์ถœ๋ ฅ
        if ("".equals(answer.toString())) {
            return "-1";
        }
        // ๊ฐ’์ด 0์ด๋ผ๋ฉด "0" ์ถœ๋ ฅ
        if ("0".equals(answer.toString().substring(0, 1))) {
            return "0";
        }
        
        // answer๋ฅผ String์œผ๋กœ ์ถœ๋ ฅ
        return answer.toString();
    }
}