
/*import java.util.*;
class Solution {
public String solution(String() participant, String() completion) {
String answer = "";
Map<String,Integer> map = new HashMap<>();
for(String c : completion)
{
map.put(c,map.getOrDefault(c,0)+1);
}
for(String p : participant)
{
if(!map.containsKey(p)||map.get(p)==0)
{
return p;
}
else{ map.put(p, map.get(p)-1); }
}
return answer;
}
}
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
class Solution {
public String solution(String() participant, String() completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for (String player : participant)
map.put(player, map.getOrDefault(player, 0) + 1);
for (String player : completion)
map.put(player, map.get(player) - 1);
Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String, Integer> entry = iter.next();
if (entry.getValue() != 0){
answer = entry.getKey();
break;
}
}
return answer;
}
}
스터디에서 동생들과 함께 풀면서 정답을 공유했어요. 사실 코딩 테스트를 해보면 빨리 풀어야 한다고 생각해서 속도나 안정성 면에서 더 좋은 게 있을까 싶었습니다. 아니, 사실 그녀는 코딩 테스트뿐만 아니라 프로젝트를 만들면서 항상 그것에 대해 생각했습니다. 그런 상황들을 확인하면서 발전하고 싶은데, 왠지 복잡하게 느껴진다.
먼저 위에서 주어진 선수들과 레이스를 완주한 사람들의 이름을 Map에 입력하고, 중복되는 경우 map.getOrDefault로 값을 처리하였다.
그리고 아래에 해당 플레이어가 없으면 p를 반환합니다.
아래는 반복자 방법입니다. 결국 비슷한 맥락에서 다루어졌다.
위에서 만든 것이 더 읽기 쉽습니다.