더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!
문제를 처음보고 저는 배열을 정렬하여 문제를 해결했습니다.
그러나 HahsMap을 사용하니 속도적인 측면에서 아래와 같은 큰 차이가 났습니다.
배열로 문제를 풀었을 때 300ms
HashMap으로 문제를 풀었을 때 72ms
하여 이번 글은 HashMap을 사용법을 익히고자 작성하였습니다.
getOrDefault(Object key, V DefaultValue)
HahsMap.getOrDefault()
메소드는 해당 key가 존재할 경우 key의 value 값을 반환하지만, key 가 존재하지 않을 경우 DefaultValue를 반환합니다.
본 코드에서 위의 메소드를 사용한 이유는 중복된 이름이 있을 경우를 처리하기 위함이었습니다.
HashMap<String, Integer> map = new HashMap<>();
for(String key : participant) map.put(key, map.getOrDefault(key,0) +1);
put을 통해 key와 value 값을 입력할 때, 기존에 key 값이 존재한다면 value를 새로운 값으로 update 합니다. 그러나 map.getOrDefault(key,0) +1
를 사용한다면 기존에 값이 있다면 기존값+1을, 없다면 0+1을 할 것입니다. 하여 이미 중복된 key 값이 있다면 해당 value는 2가 됩니다.
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
for(int i = 0; i< participant.length; i++){
if(i == completion.length) return participant[i];
if(!participant[i].equals(completion[i])){
return participant[i];
}
}
return "";
}
}
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for(String key : participant) map.put(key, map.getOrDefault(key,0) +1);
for(String key : completion) map.put(key, map.get(key)-1);
for(String key : map.keySet()){
if(map.get(key) != 0) {
answer = key;
break;
}
}
return answer;
}
}