알고리즘 공부/문제 풀이
[프로그래머스] 해시 - 완주하지 못한 선수
valid_ming
2020. 8. 28. 22:17
처음에 ArrayList에 중복 값이 있어도 remove를 하면 하나의 값만 지워진다는 사실을 알고,
중복 처리를 안해도 되겠구나! 생각해서 ArrayList를 이용하여 문제를 해결하였다.
ArrayList<String> p=new ArrayList<>();
for(int i=0;i<participant.length;i++) p.add(participant[i]);
for(int i=0;i<completion.length;i++) {
p.remove(completion[i]);
}
answer=p.get(0);
하지만.. 효율성에서 시간 초과 문제로 실패하게 되었고..
문제 분류가 해시이니.. hashMap을 이용하여 문제를 풀었다.
key는 사람 이름이고 value는 사람 수를 이용하여 중복을 처리하였다.
static String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String,Integer> map=new HashMap<>();
//map초기화
for(int i=0;i<participant.length;i++) {
//중복 이름 value 늘리기
if(map.containsKey(participant[i])) {
int val=map.get(participant[i]);
map.replace(participant[i], val+1);
}
else map.put(participant[i], 1);
}
for(int i=0;i<completion.length;i++) {
String key=completion[i];
if(map.get(key)==1) map.remove(key);
else {
int val=map.get(key);
map.replace(key, val-1);
}
}
Set<String> key=map.keySet();
Iterator<String> it=key.iterator();
answer=it.next();
return answer;
}