✔ 숫자 짝꿍
문제 분석하기
Y의 값을 HashMap에 저장한 후 X를 한 글자씩 반복하며 존재하는지 확인
만약 Y에 존재할 경우 그 글자를 리스트에 저장하고 HashMap의 값을 -1 감소
리스트가 비었다면 -1 출력
리스트를 내림차순으로 정렬
리스트의 첫 번째가 0이라면 0 출력
위의 경우가 아니라면 정렬한 값을 출력
손으로 풀어보기
- Y의 값을 HashMap에 저장
- X를 한 글자씩 반복하며 Y에 존재하는지 확인
- 존재할 경우 그 글자를 리스트에 저장하고 HashMap의 값을 -1 감소
- 존재하지 않을 경우 통과
- 리스트에 따라 결과 반환
- 리스트가 비었다면 -1 출력
- 내림차순 정렬
- 리스트의 첫 번째가 0이라면 0 출력
- 위의 경우가 아니라면 정렬한 값을 출력
슈도코드 작성하기
X, Y(짝꿍을 찾을 두 정수)
yMap(Y의 값을 저장할 HashMap)
yMap에 Y의 값을 저장
answer(두 정수의 짝꿍)
for(s -> X만큼) {
if(yMap에 s가 존재하며 s의 개수가 0보다 많다면) {
answer에 짝꿍 저장
yMap에서 HashMap의 값을 -1 감소
}
}
if(answer이 비었다면) {
-1 반환
}
else {
answer 내림차순 정렬
if(answer의 첫 번째 값이 0이라면) {
0 반환
}
else {
sb(StringBuilder)
for(s -> answer의 길이만큼) {
sb.append(s)
}
sb 반환
}
}
코드 구현하기
/**
* 131128) 숫자_짝꿍
*/
public class L057_131128 {
// X, Y(짝꿍을 찾을 두 정수)
public String solution(String X, String Y) {
// yMap(Y의 값을 저장할 HashMap)
Map<String, Integer> yMap = new HashMap<>();
// yMap에 Y의 값을 저장
for (String s : Y.split("")) {
yMap.put(s, yMap.getOrDefault(s, 0) + 1);
}
// answer(두 정수의 짝꿍)
List<String> answer = new ArrayList<>();
// X가 yMap에 존재하는지 확인
for (String s : X.split("")) {
// yMap에 s가 존재하며 s의 개수가 0보다 많다면
if (yMap.containsKey(s) && yMap.get(s) > 0) {
// answer에 짝꿍 저장
answer.add(s);
// yMap에서 HashMap의 값을 -1 감소
yMap.put(s, yMap.get(s) - 1);
}
}
// answer이 비었다면
if (answer.isEmpty()) {
// -1 반환
return "-1";
} else {
// answer 내림차순 정렬
answer.sort(Collections.reverseOrder());
// answer의 첫 번째 값이 0이라면
if (answer.get(0).equals("0")) {
// 0 반환
return "0";
} else {
// sb(StringBuilder)
StringBuilder sb = new StringBuilder();
// answer의 값들을 붙여 문자열로 변환
for (String s : answer) {
sb.append(s);
}
// sb 반환
return sb.toString();
}
}
}
// 테스트 케이스
public static void main(String[] args) {
L057_131128 solution = new L057_131128();
String X = "5525";
String Y = "1255";
String result = solution.solution(X, Y);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[92334] 신고 결과 받기 (0) | 2023.12.16 |
---|---|
[118666] 성격 유형 검사하기 (0) | 2023.12.16 |
[131705] 삼총사 (0) | 2023.12.15 |
[132267] 콜라 문제 (0) | 2023.12.14 |
[133499] 옹알이 (2) (0) | 2023.12.13 |