///////
Search
🔍

Hash 문제 풀이 (완주하지 못한 선수)

완주하지 못한 선수

첫 번째 시도

로직 생각해보기
HashMap memo에 Participant를 모두 넣을 때 1로 초기화하기
Completion에 들어있는 이름을 key로 HashMap에 검색하기 있으면 0으로 체크
for문을 이용하여 memo를 1번 순회하면서 1인 값 찾기
만약, 1인 값이 있다면 return 해주기
구현해보기
public String solution(String[] participant, String[] completion) { Map<String, Integer> memo = new HashMap<>(); // 1️⃣ for (int i = 0; i < participant.length; i++) { String key = participant[i]; memo.put(key, 1); } // 2️⃣ for (int i = 0; i < completion.length; i++) { String key = completion[i]; // value 1 memo.put(key, 0); } // 3️⃣ for (String key : memo.keySet()) { // 4️⃣ if (memo.get(key) == 1) { return key; } } }
Java
복사

풀이 번의 문제점

중복된 이름이 있는 경우(동명이인)는 어떻게 체크하지 ?

두 번째 시도

로직 생각해보기
HashMap memo에 Participant[i]인 key값이 없다면 0으로 초기화해주기
memo의 Participant[i](key)에 +1 해주기 한 명 체크
Completion에 들어있는 이름을 key로 HashMap에 검색하기 있으면 -1 해주기
for문을 이용하여 memo를 1번 순회하면서 1인 값 찾기
있으면 해당 key의 value를 -1
만약, 1인값이 있다면 return 해주기
구현해보기
public String solution(String[] participant, String[] completion) { Map<String, Integer> memo = new HashMap<>(); for (int i = 0; i < participant.length; i++) { String key = participant[i]; // 1️⃣ if (!memo.containsKey(key)) { memo.put(key, 0); } // 2️⃣ memo.put(key, memo.get(key) + 1); } // 3️⃣ for (int i = 0; i < completion.length; i++) { String key = completion[i]; // value 1 memo.put(key, memo.get(key) - 1); } // 4️⃣ for (String key : memo.keySet()) { // 5️⃣ if (memo.get(key) == 1) { return key; } } }
Java
복사

Refactoring (HashMap의 .getOrDefault())

.getOrDefault() 란?
로직 생각해보기 (번 풀이와 동일)
HashMap memo에 Participant[i]인 key값이 없다면 0으로 초기화해주기
memo의 Participant[i](key)에 +1 해주기 한 명 체크
Completion에 들어있는 이름을 key로 HashMap에 검색하기 있으면 -1 해주기
for문을 이용하여 memo를 1번 순회하면서 1인 값 찾기
있으면 해당 key의 value를 -1
만약, 1인값이 있다면 return 해주기
구현해보기
public String solutionV2(String[] participant, String[] completion) { String answer = ""; HashMap<String, Integer> memo = new HashMap<>(); // 1️⃣ + 2️⃣ : getOrDefault를 활용 for (String player : participant) { players.put(player, memo.getOrDefault(player, 0)+1); } // 3️⃣ for (String completed : completion) { players.put(completed, memo.get(completed) - 1); } // 4️⃣ for (String key : players.keySet()) { if (players.get(key) != 0) { // 5️⃣ answer = key; } } return answer; }
Java
복사