해시맵 초면입니다만?
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/42576
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> myMap = new HashMap<>();
for(String p : participant){
myMap.put(p, myMap.getOrDefault(p, 0)+1);
}
for(String c : completion){
if(myMap.get(c)==1){
myMap.remove(c);
}
else{
myMap.put(c,myMap.get(c)-1);
}
}
System.out.println(myMap);
for(String s : myMap.keySet()){
answer+=s;
}
return answer;
}
}
요게 내가 수업시간 때 버벅댔던 문제이다.
내 머리는 리스트로 푸는 방법대로만 돌아갔기 때문에 이 방식으로 생각하는 힘이 부족했댜.🫢
수업시간에 강사님이 풀어주시는 거 보고 집 와서 그대로 풀어본 문제!
1) 해시맵을 사용해서 <사람이름>:<명 수> 로 표기한다.
-> 동명이인 이슈!
2) 그리고 completion 배열에 key가 있는 게 확인이 되면 해시맵에서 그 key값에 해당하는 value를 decrement한다.
3) 만약 그 value가 1이라면 어차피 0이 되기 때문에 (사람 수==1) 아예 그 key값을 remove한다.
익숙해질게 ...