
✅ 방법 1 : 해시를 이용하지 않고 작성
1) Arrays.sort() 를 이용하여 participant, completion 정렬
2) for loop 의 범위는 completion.length - prevent IndexOutOfBound
3) 정렬 했을때 participant 리스트에 완주하지 못한 사람이 마지막에 위치 한다면 온다면 loop 끝난 이후 return participant[i]
중간에 온다면 completion[i] == pariticpant[i+1] 이므로, return participant[i]
| 0 | 1 | 2 | 3 | 4 |
| filipa | josipa | nikola | vinko | |
| filipa | josipa | nikola | vinko |
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
int i; //position
Arrays.sort(participant);
Arrays.sort(completion);
for(i = 0; i < completion.length; i++) {
if(!participant[i].equals(completion[i])) {
return participant[i];
}
}
return participant[i];
}
}
✅ 방법 2 : 해시 이용하여 작성
* 참가자 중에 동명이인이 있을 수 있다는 제한사항이 있기때문에 HashMap 이용
* 알고리즘 :
(partition 에서 나온 이름의 수 - completion 에서 나온 이름의 수)
== 0 일 경우는 참가자가 완주했다는 의미이고
== 1 일 경우는 참가자가 완주하지 못했다는 의미가 된다.
import java.util.*; // HashMap 이용
import java.util.Map.*; // Entry<> 이용
class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String, Integer> map = new HashMap<>();
for(String part : participant) {
map.put(part, map.getOrDefault(part, 0) + 1);
// getOrDefault(Object key, V defaultValue)
// 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값 0을 반환
// 현재 저장된 문자열 수 + 1
}
// participant 에서 넣었던 이름들을 completion에서 찾아 동일한 이름이 존재한다면
// count 를 줄여라. 그러면 두 Array에 존재했던 이름들은 0 이 되고
// participant 에만 존재했던 이름은 1로 남게된다.
for(String comp : completion) {
map.put(comp, map.get(comp) - 1);
}
// map을 iterate하며 map 안의
// value(participant 나타난 이름 수 - completion 나타난 이름수) 가
// 0 보다 클 경우 값을 return 한다.
for(Entry<String, Integer> entry : map.entrySet()) {
if(entry.getValue() > 0) {
return entry.getKey();
}
}
return "";
}
}
🌟 Hash 에서 중요한 메소드
| containsKey(Object key) | map 에 존재하면 return true |
| get(Object key) | key가 매핑되어있는 value return |
| getOrDefault(Object Key, V defaultValue) | map에 존재하면 key의 값을 없게되면 default 값을 return |
| entrySet() -- Set<Map.Entry<K,V>> | map 의 Set 리턴 |
| size() | Map 의 크기 return |
| put(K key, V value) | map 안에 key-value 저장 |
🔗 링크 : https://programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
'🌈 CS Requirements > 프로그래머스' 카테고리의 다른 글
| 정렬: K번째 수 (0) | 2021.06.02 |
|---|