(1) 해시맵을 사용하여 시간복잡도를 해결하고 알맞게 순회하여 완주하지 못한 선수를 찾자
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
ArrayList list = new ArrayList();
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
for(int i= 0 ; i< participant.length;i++) {
if(!map.containsKey(participant[i])) {
map.put(participant[i], new ArrayList<String>());
}
map.get(participant[i]).add(participant[i]);
}
for(int i = 0; i<completion.length;i++) {
if(map.containsKey(completion[i])) {
List<String> names = map.get(completion[i]);
if(names.size()>1) {
names.remove(0);
} else {
map.remove(completion[i]);
}
}
}
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
answer = key;
break;
}
return answer;
}
}
(1) 해시맵을 사용하여 참여자 선수와 동명이인이 있을 수 있으니 value 값에 리스트 타입으로 불린만큼 add 해줬다.
(2) 완주한 선수만큼 반복문을 체크하여 value 값에 해당하는 선수의 리스트에서 remove 해준다.
(3) iterator를 사용하여 다음 key 값이 있는 경우 즉 완주하지 못한 선수의 key (이름) 이 있다면 answer = key 값을 넣고 순회를 종료한다.
--
--
해시맵과 Iterator 에 대해 너무 모르고 있어서 정리해보자
해시맵이란 ?
- 해싱(Hashing) 된 맵(map)
관련 메소드
- containkey(key) : 맵에 해당하는 키가 있는지 참 거짓으로 반환한다.
Iterator 개념과 사용법
- Iterator<데이터타입> iterator명 = 컬렉션.iterator();
ㄴ 컬렉션이란 ? : (List, Set, Map, Queue 등)