수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
| participant | completion | return |
|---|---|---|
| ["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
| ["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
| ["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
// 참가자 명단을 해시맵에 저장
HashMap<String, Integer> map = new HashMap<>();
for (String player : participant) {
if (map.containsKey(player)) {
map.put(player, map.get(player) + 1);
} else {
map.put(player, 1);
}
}
// 완주자 명단을 해시맵에서 빼기
for (String player : completion) {
if (map.containsKey(player)) {
map.put(player, map.get(player) - 1);
}
}
// 완주하지 못한 선수 찾기
for (String player : participant) {
if (map.get(player) > 0) {
answer = player;
break;
}
}
return answer;
}
}
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
for (String player : completion) hm.put(player, hm.get(player) - 1);
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
}
}
return answer;
}
}
public class Solution {
int bucketSize;
List<Entry>[] bucket;
public String solution(String[] participant, String[] completion) {
bucketSize = (completion.length / 5)+1;
bucket = new List[bucketSize];
for (int i = 0; i < completion.length; i++) {
Entry entry = get(completion[i]);
entry.value += 1;
}
for (int i = 0; i < participant.length; i++) {
Entry entry = get(participant[i]);
if (entry != null && entry.value > 0) {
entry.value -= 1;
} else {
return entry.key;
}
}
throw new RuntimeException("error");
}
private Entry get(String s) {
int idx = hash(s);
List<Entry> list = bucket[idx];
if (list == null) {
list = new List<Entry>();
Entry entry = new Entry(s, 0);
list.add(entry);
bucket[idx] = list;
return entry;
} else {
Entry entry = list.get(s);
if (entry == null) {
entry = new Entry(s, 0);
list.add(entry);
}
return entry;
}
}
private int hash(String s) {
int num = 0;
for(int i=0; i<s.length(); i++) {
num += s.codePointAt(i) * 31 + s.codePointAt(i);
}
return num % bucketSize;
}
class Entry {
String key;
int value;
public Entry(String key, int value) {
this.key = key;
this.value = value;
}
}
class List<T extends Entry> {
Node head;
public void add(T entry) {
Node nn = new Node(entry, null);
if (head == null) {
head = nn;
} else {
Node last = head;
while (last.next != null) {
last = last.next;
}
last.next = nn;
}
}
public <T extends Entry> T get(String s) {
Node node = head;
while (node != null) {
if (node.data.key.equals(s)) {
return (T) node.data;
}
node = node.next;
}
return null;
}
class Node<T extends Entry> {
T data;
Node next;
public Node(T data, Node next) {
this.data = data;
this.next = next;
}
}
}
public static void main(String[] args) {
String[] p = {"mislav", "stanko", "mislav", "ana"};
String[] c = {"stanko", "ana", "mislav"};
Solution s = new Solution();
String answer = s.solution(p, c);
System.out.println(answer);
}
}