โค๏ธ 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" |
- X, Y์ ์ง๊ฟ์ ์กด์ฌํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ "-1"์ returnํฉ๋๋ค.
- X, Y์ ๊ณตํต๋ ์ซ์๋ 0์ผ๋ก๋ง ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์, ๋ ์์ ์ง๊ฟ์ ์ ์ 0์ ๋๋ค. ๋ฐ๋ผ์ "0"์ returnํฉ๋๋ค.
- X, Y์ ์ง๊ฟ์ 10์ด๋ฏ๋ก, "10"์ returnํฉ๋๋ค.
- X, Y์ ์ง๊ฟ์ 321์ ๋๋ค. ๋ฐ๋ผ์ "321"์ returnํฉ๋๋ค.
- ์ง๋ฌธ์ ์ค๋ช ๋ ์์์ ๊ฐ์ต๋๋ค.
๐ 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()์ ์ฌ์ฉํด์ ๋ฐํํ๋ฉด ๋!
'Programmers lv-1' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธฐ์ฌ๋จ์์ ๋ฌด๊ธฐ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2023.01.03 |
---|---|
๋ฌธ์์ด ๋๋๊ธฐ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2023.01.02 |
์คํจ์จ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2022.12.26 |
๊ณผ์ผ ์ฅ์ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (2) | 2022.12.24 |
๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ธ์ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2022.12.23 |
์์ฃผํ์ง ๋ชปํ ์ ์ - Java [์ฝ๋ฉํ ์คํธ ์ฐ์ต] (0) | 2022.12.23 |
๋๊ธ