빙응의 공부 블로그
[Programmers]Lv.1 숫자짝꿍 본문

📝풀이
구현 자체는 매우 쉬운 문제였다. 그게 문제가 아니지만..
- x와 y의 중복되는 자리 짝꿍 찾기
- 찾은 짝궁 sort로 정렬해 가장 큰 값으로 만들기
class Solution {
public String solution(String X, String Y) {
List<Integer> answer = new ArrayList<>();
for (int i = 0; i < Y.length(); i++) {
char yChar = Y.charAt(i);
for (int j = 0; j < X.length(); j++) {
char xChar = X.charAt(j);
if (xChar == yChar) {
answer.add(Character.getNumericValue(xChar));
X = X.substring(0, j) + X.substring(j + 1); // 중복 방지
break;
}
}
}
if (answer.isEmpty()) {
return "-1";
} else {
Collections.sort(answer, Collections.reverseOrder());
StringBuilder result = new StringBuilder();
answer.forEach(result::append);
if (result.charAt(0) == '0') {
return "0";
} else {
return result.toString();
}
}
}
}
내가 처음으로 구현한 코드이다. 간단하게 구현하였는데 바로 시간초과...
나중에 찾아보니 완전 다른 접근 방법을 사용하더라
난 생각도 못했다. 내가 아직 허술한 사람이라 그런것 같다
import java.util.*;
class Solution {
static public String solution(String X, String Y) {
StringBuilder answer = new StringBuilder();
int[] x = new int[10];
int[] y = new int[10];
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < X.length(); i++) {
int temp = X.charAt(i) - '0';
x[temp]++;
}
for (int i = 0; i < Y.length(); i++) {
int temp = Y.charAt(i) - '0';
y[temp]++;
}
for (int i = 9; i >= 0; i--) {
if (x[i] != 0 && y[i] != 0) {
for (int j = 0; j < Math.min(x[i], y[i]); j++) list.add(i);
}
}
if (list.size() == 0) {
return "-1";
} else if (list.get(0) == 0) {
return "0";
}
for (int i : list) {
answer.append(i);
}
return answer.toString();
}
}
해당 코드는 단순히 1~9 자리의 숫자들이 몇개 있는지만 비교하며
x와 y 1~9 출현 빈도 중 가장 작은 값을 찾아 정답으로 만든다.
'Argorithm' 카테고리의 다른 글
| [Programmers]Lv.1 신고 결과 받기 (0) | 2023.12.27 |
|---|---|
| [Programmers]Lv.1 성격 유형 검사 (1) | 2023.12.27 |
| [Programmers]Lv.1 콜라문제 (0) | 2023.12.18 |
| [Programmers]Lv.1 옹알이(2) (0) | 2023.12.15 |
| [Programmers]LV.1 햄버거 만들기 (0) | 2023.12.13 |