import java.util.HashMap;
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> people = new HashMap<String, Integer>();
Arrays.stream(participant)
.forEach(p -> {people.put(p, people.containsKey(p) ? people.get(p) + 1 : 1);});
Arrays.stream(completion)
.forEach(p -> {if(people.get(p).equals(1)) people.remove(p); else people.put(p, people.get(p) - 1);});
for(String s : people.keySet()) answer = s;
return answer;
}
}
이 코드는 어제 배운 stream을 써보고 싶어서 쓴 코드이다.
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> people = new HashMap<String, Integer>();
for(String p : participant) people.put(p, people.containsKey(p) ? people.get(p) + 1 : 1);
for(String p : completion) {
if(people.get(p).equals(1)) people.remove(p);
else people.put(p, people.get(p) - 1);
}
for(String s : people.keySet()) answer = s;
return answer;
}
}
좀 더 읽기쉽게 풀었다. 방법은 v1, v2 둘 다 동일하다.
먼저 참가자들의 이름으로 <이름, 사람 수(동명이인수)> HashMap을 생성하고
완주자들을 순회하며 map에서 사람수를 줄여나갔다. 만약 0명일 경우 아예 지우도록 한다. 마지막 남은 key가 정답이다.
코드가 훨씬 간결해진다.
이번에는 푸는 방법이나 그런것 보다는 stream 을 배우고 적용하는것에 초점을 뒀다.