완주하지 못한 선수
첫 번째 시도
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
복사
풀이
번의 문제점
두 번째 시도
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())
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
복사