문제:
설계:
1)hashmap을 이용하여 key = name, value = 횟수 로 설정한다.
2)if문으로 get을 이용하여 해당 name의 value가 0인지 검증하고, 0이라면 participant의 name을 put으로 넣으면서 value를 1로 넣는다. 0이 아니라면, get으로 value값을 가져와 그 값에서 1을 증가시킨 값을 put으로 다시 넣는다.
3)completion의 name을 가져와 해당 name으로 get을하여 hashmap에서 value를 가져오고 가져온 value에서 -1을하고 다시 hashmap에 put으로 넣는다
4)hashmap의 key값을 탐색하여 그 value가 0이 아닐 시, 해당 key값을 결과값에 저장한다.
시행착오:
2)와 3)을 아주 간단하게 코드한줄로 나타낼 수 있는 api가 있었다.
바로 getOrDefault(key, default) 함수이다.
hashmap에서 key값으로 value를 가져올때, 값이없으면 default로 가져오게 할 수 있다, 또한 값이 있으면
해당 값을 불러온다. 이 getOrDefault 가 기본 스켈레톤에 있어서 이 함수를 찾아보았고, 이것을 사용하니
내가 설계했던 2)와 3)이 매우 간단한 코드로 구현 가능했다.
코드:
import java.util.Arrays;
import java.util.HashMap;
class Solution{
public String solution(String[] participant, String[] completion){
String answer ="";
HashMap<String, Integer> prtcpt_map = new HashMap<>();
for(String name: participant){
prtcpt_map.put(name, prtcpt_map.getOrDefault(name, 0)+1);
}
for(String name: completion){
prtcpt_map.put(name, prtcpt_map.get(name)-1);
}
for(String name: prtcpt_map.keySet()){
if(prtcpt_map.get(name) !=0){
answer = name;
break;
}
}
return answer;
}
}
결과:
한줄평:
솔직히 나는 hashmap이 익숙하지 않아서, 주제가 hashmap이 아니였으면
array 정렬로 풀었을것 같다.
하지만 hashmap이 훨씬 간단하고 빠른것 같다.
'알고리즘 > 프로그래머스 일기' 카테고리의 다른 글
[프로그래머스] k번째 수 (0) | 2020.05.28 |
---|---|
[프로그래머스] LV1-1 (0) | 2020.05.28 |
프로그래머스를 시작 (0) | 2020.05.28 |