https://school.programmers.co.kr/learn/courses/30/lessons/42576
문제
참가자 p와 결과 c배열을 비교해 c에 없는 p의 인덱스 구하기
풀이
분명히 lv.1이지만 오래걸렸다. 왜 그렇게 됬나면
1) p배열에 중복이 있다는 것을 확인 못함
2) HashMap의 함수의 정확한 이름을 모르고 있음(자동완성으로 하는지라...)
3) HashMap에 put을 할때 이미 같은 키가 있으면 중복 키가 허용되는 것이 아니라 새로운 value로 덮어씌워진다는 것을 몰랐다. 진심으로
4) String의 문자열 구성이 같으면 hashCode()도 똑같이 나온다.
이것땜에 풀이 자체는 매우 간단하나 여러 시행착오가 있어 오래걸렸다.
대충 HashMap에 결과자와 수 쌍을 넣고, 그 수에 따라 p 배열과 비교해 한명만 있으면 remove, 두명 이상이면 value의 값을 하나 줄인다.
그렇게 계산하다보면 HashMap이 비어버리기에 나머지 탈락자 1명은 containsKey를 하면 false가 된다. 이게 답이다.
코드
import java.util.*;
class Solution {
public String solution(String[] p, String[] c) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for(int i=0; i<c.length; i++){
if(map.containsKey(c[i])){
int cnt = map.get(c[i]);
map.put(c[i], cnt+1);
continue;
}
map.put(c[i], 0);
}
for(int i=0; i<p.length; i++){
// 아예 map에 명단이 없는 경우
if(!map.containsKey(p[i])){
answer = p[i];
break;
}
// 있지만 수가 부족한 경우
else{
int cnt = map.get(p[i]);
if(cnt > 0) map.put(p[i], --cnt);
else{
map.remove(p[i]);
}
}
}
return answer;
}
}