๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-1

์ˆซ์ž ์ง๊ฟ - Java [์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต]

by ๊ทคํ”ผํ‚ค 2022. 12. 27.

 

 

โค๏ธ Problem

๋”๋ณด๊ธฐ
  • ๋ฌธ์ œ
    ๋‘ ์ •์ˆ˜ X, Y์˜ ์ž„์˜์˜ ์ž๋ฆฌ์—์„œ ๊ณตํ†ต์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜ k(0 ≤ k ≤ 9)๋“ค์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ •์ˆ˜๋ฅผ ๋‘ ์ˆ˜์˜ ์ง๊ฟ์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹จ, ๊ณตํ†ต์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ •์ˆ˜ ์ค‘ ์„œ๋กœ ์ง์ง€์„ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค). X, Y์˜ ์ง๊ฟ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด, ์ง๊ฟ์€ -1์ž…๋‹ˆ๋‹ค. X, Y์˜ ์ง๊ฟ์ด 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 ํ•œ ๊ฐœ๋Š” ์ง ์ง€์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)
    ๋‘ ์ •์ˆ˜ X, Y๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, X, Y์˜ ์ง๊ฟ์„ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

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

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…
no X Y result
1 "100" "2345" "-1"
2 "100" "203045" "0"
3 "100" "123450" "10"
4 "12321" "42531" "321"
5 "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. ์ง€๋ฌธ์— ์„ค๋ช…๋œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’› Solution

ํ’€์ด

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
class Solution {
    public String solution(String X, String Y) {
        String[] partX = X.split("");
        String[] partY = Y.split("");
        Arrays.sort(partX);
        Arrays.sort(partY);

        ArrayList<String> arr = new ArrayList<>();
        int start = 0;
        for(int i=0; i<partX.length; i++) {
        	int tmp = Integer.parseInt(partX[i])+1;
            for(int j=start; j<partY.length; j++){
                if(partX[i].equals(partY[j])) {
                    arr.add(partX[i]);
                    start = j+1;
                    break;
                } else if(Integer.parseInt(partY[j]) >= tmp) {
                	break;
                }
            }
        }

        StringBuilder answer = new StringBuilder();
        if(arr.isEmpty()) {
            answer.append("-1");
        } else {
            if(arr.lastIndexOf("0") == arr.size()-1) {
               	answer.append(0);
            } else {
                Collections.sort(arr, Collections.reverseOrder());
                for(int i=0; i<arr.size(); i++) {
                    answer.append(arr.get(i));
                }
            }
        }

        return answer.toString();
    }
}

 

์ฒ˜๋ฆฌ์†๋„๊ฐ€ ํ˜„์žฌ๋กœ์„œ๋Š” ์ตœ์„ ์ด๋‹ค.


 


 

๐Ÿ’œ Comment

์™€ ์ด ๋ฌธ์ œ๋Š” ํ†ต๊ณผ๊ฐ€ ๋”ฑ ๋–ด์„ ๋•Œ ์†Œ๋ฆฌ์ง€๋ฅผ ๋ป”ํ–ˆ๋˜ ๋ฌธ์ œ์ด๋‹ค. ๊ณ„์†ํ•ด์„œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 11, 12, 13, 14 ,15๋ฒˆ์ด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ํ‘ธ๋Š” ๋‚ด๋‚ด ๊ณจ๋จธ๋ฆฌ๋ฅผ ์•“์•˜๋‹ค. ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ ์ด์œ ๋Š” ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ N์˜ ์ œ๊ณฑ์ด ๋˜๋Š” ๊ฑด ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋‚ด ๋จธ๋ฆฌ๋กœ๋Š” ๋„์ €ํžˆ ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ๋„์ถœํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค. ๊ทธ๋ž˜์„œ ๋๋๋‚ด ์ผ๊ณ  ํ†ต๊ณผํ•œ ๋ฌธ์ œ...๐Ÿ˜‚ ํšจ์œจ์„ ์œ„ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๋จผ์ € String X, Y๋ฅผ ๊ฐ๊ฐ .split("");๋ฅผ ์‚ฌ์šฉํ•ด์„œ String[] partX, partY์— ๋ถ„ํ• ํ•˜์˜€๋‹ค. ๊ทธ ๋‹ค์Œ Arrays.sort();๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ •๋ ฌํ•˜์˜€๋‹ค. ์ •๋ ฌํ•œ ์ด์œ ๋Š” ์•„๋ž˜์—์„œ ์ด์ค‘for๋ฌธ์€ ์‚ฌ์šฉํ•  ๋•Œ ์ตœ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•จ์ด์—ˆ๋‹ค. "0"๋ถ€ํ„ฐ "9"๊นŒ์ง€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋ฏ€๋กœ, ๋™์ผํ•œ String์„ ๊ฐ€์กŒ์„ ๋•Œ ๋น„๊ต ํ›„ ๋ฐ”๋กœ break;๋กœ ๋‚ด๋ถ€ for๋ฌธ์„ ํƒˆ์ถœํ•˜๋ ค ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

๊ทธ ๋‹ค์Œ, ๋™์ผํ•œ ์š”์†Œ(์ˆซ์ž ์ง๊ฟ)๋ฅผ ๋‹ด์„ ArrayList<String>๋ฅผ ์ค€๋น„ํ–ˆ๋‹ค. ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ–ˆ์„ ๋•Œ๋Š” ArrayList<Integer>๋ฅผ ์ค€๋น„ํ–ˆ๋Š”๋ฐ, ๊ตณ์ด ํ˜•๋ณ€ํ™˜์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•„์„œ String์œผ๋กœ ์„ ์–ธํ–ˆ๋‹ค. int Start=0;๋ฅผ ์„ ์–ธํ•œ ๋’ค, ์ด์ค‘ for๋ฌธ์„ ์ƒ์„ฑํ•ด์„œ partX[i]์™€ partY[j]๋ฅผ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค€๋น„ํ–ˆ๋‹ค. int Start๋Š” j์˜ ํ•œ๊ณ„์ ์ด๋‹ค. ๋™์ผํ•œ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ start = j+1;๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” partY[j]๊นŒ์ง€๋Š” ์ด๋ฏธ partX[i]์™€ ๋น„๊ต๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋‹ค์Œ partX[i+1]๊ณผ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘์ง€์ ์„ ๋ฐ”๊พธ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

์ด์ค‘ for๋ฌธ์˜ ๋ฐ”๊นฅ ๋ถ€๋ถ„์—์„œ๋Š” int tmp=Integer.parseInt(partX[i])+1;์„ ์„ ์–ธํ–ˆ๋‹ค. partX[i]์™€ ๋™์ผํ•œ์ง€๋งŒ์„ ๋น„๊ตํ•˜๋ฉด ๋˜๋ฏ€๋กœ partX[i]๋ณด๋‹ค 1 ์ปค์ง€๋Š” ๋ถ€๋ถ„๋ถ€ํ„ฐ๋Š” ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ชฝ for๋ฌธ์„ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด(break;) ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ค€๋น„ํ–ˆ๋‹ค. ๊ทธ ๋‹ค์Œ, if-else if๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ์•ฝ partX[i].equals(partY[j])์ธ ๊ฒฝ์šฐ์—๋Š” ๋™์ผํ•œ ์š”์†Œ๋ผ๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ArrayList์— ํ•ด๋‹น ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ์•ž์„œ ๋งํ•œ๋Œ€๋กœ start๋ฅผ j+1๋กœ ๋ฐ”๊พผ ๋’ค break;ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ Integer.parseInt(partY[j]) >= tmp์ธ ๊ฒฝ์šฐ์—๋Š” ๋” ์ด์ƒ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์‹œ break;๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜์˜€๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ์•ž์„œ ๋ฐฐ์—ด์„ Arrays.sort();๋กœ ์ •๋ ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์ด๋‹ค.

๊ทธ ๋‹ค์Œ์œผ๋กœ ์ •๋‹ต์„ ๋‹ด์„ StringBuilder๋ฅผ ์ค€๋น„ํ–ˆ๋‹ค. StringBuilder๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ๋ฌธ์ž์—ด์˜ ์ถ”๊ฐ€ ๋˜๋Š” ๋ณ€๊ฒฝ์ด String๋ณด๋‹ค ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋œ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ ๋‹ค์Œ if-else ๋ฅผ ์‚ฌ์šฉํ•ด์„œ arr.isEmpty()๋ผ๋ฉด "-1"์„, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ ์•ˆ์— if-else๋ฅผ ์‚ฌ์šฉํ•ด์„œ arr.lastIndexOf("0") == arr.size()-1;์ด๋ฉด "0"์„, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ArrayList์˜ ๊ฐ’ ์ˆœ์„œ๋ฅผ Collections.sort(arr, Collections.reversOrder());๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•˜๋‚˜์”ฉ StringBuilder์— ์‚ฝ์ž…ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

arr.lastIndexOf("0") == arr.size()-1;์ด๋ผ๋Š” ์˜๋ฏธ๋Š” "0"์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ณด๋‹ค 1 ์ž‘์„ ๋•Œ๋ผ๋Š” ๋œป์ด๋‹ค. ๊ทธ ๋ง์€ ๊ณง, "0"์ด ๋ฐฐ์—ด์˜ ๋์— ๋“ค์–ด์žˆ๋‹ค๋ฉด์ด๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” "0"๋งŒ์ด ๋“ค์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†๊ณ  "0"์œผ๋กœ ์น˜ํ™˜ํ•ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Collections.sort(arr, Collections.reversOrder());์„ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ๊ณตํ†ต๋œ ์ˆซ์ž๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฐ ์ˆ˜๋ถ€ํ„ฐ ๋ฐฐ์—ดํ•˜์—ฌ ๊ทธ๊ฑธ ์ˆœ์ฐจ์ ์œผ๋กœ Stringbuilder์— ๋„ฃ๊ธฐ ์œ„ํ•จ์ด์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Stringbuilder๋ฅผ .toString()์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋!

 

 

 

6์ !!!!! 7866์œ„๋‹ค๐Ÿ˜๐Ÿ˜๐Ÿ˜

๋Œ“๊ธ€