2025. 2. 21. 16:27ㆍ백준 및 프로그래머스/프로그래머스 LV 1
문제 설명

요약: X,Y의 짝궁 중에서 가장 큰 값이 무엇인지 구하는 문제 입니다.
제한 사항과 입출력 예시

100 -> 2345 서로 겹치는 짝궁이 없습니다. 없을 경우에는 "-1" 반환
100 -> 203045 서로 겹치는 짝궁이 있습니다. 0이 2개가 겹칩니다. 하지만 0은 몇개가 있더라도 가장 큰 수는 "0"입니다.
100 -> 123450 서로 겹치는 짝궁이 2개 있습니다. 1,0 한개 씩 겹칩니다. 이 중 가장 큰 수는 "10"입니다.
이러한 방식으로 문제를 접근하고 코드를 작성하면 쉽게 풀 수 있습니다.
전체 코드
import java.util.*;
import java.lang.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
StringBuilder sb = new StringBuilder();
int n = X.length();
int m = Y.length();
Map<Character,Integer> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
//1:0,2:3 이런 방식으로 숫자가 몇 개 있는 지 확인
for(int i = 0; i<n; i++){
char num = X.charAt(i);
if(map.get(num) == null){
map.put(num,1);
}else{
map.put(num,map.get(num)+1);
}
}
// System.out.println(map);
//Y값과 비교후 값이 있으면 list에 넣어줌
for(int i = 0; i<m; i++){
char num = Y.charAt(i);
if(!map.containsKey(num) || map.get(num) == 0){
continue;
}
if(map.get(num) > 0){
map.put(num,map.get(num)-1);
list.add(Integer.parseInt(String.valueOf(num)));
}
}
if(list.isEmpty()){
return "-1";
}
Collections.sort(list,Collections.reverseOrder());
// System.out.println(list);
for(int w : list){
sb.append(w);
}
return sb.charAt(0) =='0' ? "0" : sb.toString();
}
}
1.처음에 X에 있는 숫자 값이 몇 개 있는지 Map을 활용해 저장했습니다.
2.Map과 Y를 비교하면서 값이 있고 1개 이상인지 비교했습니다.
- 값이 0이나오다면 숫자는 겹치지만 이미 다 사용했다는 이야기입니다.
3.1개 이상의 값이 존재한다면 LIST를 통해 값을 넣어줬습니다.
4.최댓 값을 구하는 문제이기에 LIST를 정렬해준다음 역순을 했습니다. -> EX) 0123 -> 3210 (이 방식으로 최댓 값을 구했습니다.) 하지만 이 부분은 더 효율적인 방법이 있을 거라 생각합니다.
5.StringBuilder 를 통해 list값을 갱신해줬습니다.
6.혹시 맨 앞 숫자가 0일경우에는 뒷 값도 0000000으로 배치 되어있어 젤 큰 숫자는 0이됩니다.
7.6번이 아니라면 최댓값을 나타냅니다.
결과


아마 더 효율적인 방법은 있을 거라 생각합니다.
'백준 및 프로그래머스 > 프로그래머스 LV 1' 카테고리의 다른 글
| 2022 KAKAO TECH INTERNSHIP-성격 유형 검사하기- JAVA (0) | 2025.02.23 |
|---|---|
| 크레인 인형뽑기 게임 - JAVA (0) | 2025.02.21 |
| 프로그래머스 LV1(6) (0) | 2024.01.29 |
| 프로그래머스 LV 1 (0) | 2024.01.28 |
| 프로그래머스 LV 1(5) (0) | 2024.01.26 |