programmers lv2 전화번호 목록(고득점 kit)
완주하지 못한 선수
완주하지 못한 선수는 딱 한명이다.
그래서 완주자를 먼저 hashmap에 넣고,
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String, Integer> hm= new HashMap<>();
for(String name : completion){ //완주자 먼저
if (hm.containsKey(name)) {
hm.replace(name, hm.get(name)+1);
} else {
hm.put(name,1);
}
}
for(String name : participant){
if(hm.containsKey(name)){
if(hm.get(name) == 1){
hm.remove(name);
}else{
hm.replace(name, hm.get(name)-1);
}
}else{
return name;
}
}
return null;
}
}
}
정확성 테스트
테스트 1 〉 통과 (0.02ms, 52.7MB)
테스트 2 〉 통과 (0.06ms, 51.9MB)
테스트 3 〉 통과 (0.35ms, 52.9MB)
테스트 4 〉 통과 (0.87ms, 53.8MB)
테스트 5 〉 통과 (0.72ms, 53.4MB)
효율성 테스트
테스트 1 〉 통과 (31.55ms, 81.2MB)
테스트 2 〉 통과 (64.66ms, 89.2MB)
테스트 3 〉 통과 (74.68ms, 99.2MB)
테스트 4 〉 통과 (44.74ms, 95.4MB)
테스트 5 〉 통과 (76.34ms, 95.6MB)
채점 결과
정확성: 50.0
효율성: 50.0
합계: 100.0 / 100.0
아래는 500명이 제출한 답안
Arrays.sort 먼저 정렬하고, (완주하지 못한 선수는 한명이기에) 두 배열이 일치하지 않으면 바로 return 함
해시 고득점 kit에서 만나지 않고, 날것의 문제로 만났더라면 이 접근법이 먼저 생각났을 수도 있을 것 같다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
int i;
for ( i=0; i<completion.length; i++){
if (!participant[i].equals(completion[i])){
return participant[i];
}
}
return participant[i];
}
}
정확성 테스트
테스트 1 〉 통과 (0.29ms, 53.1MB)
테스트 2 〉 통과 (0.33ms, 52.1MB)
테스트 3 〉 통과 (3.26ms, 53.1MB)
테스트 4 〉 통과 (4.81ms, 53.6MB)
테스트 5 〉 통과 (6.42ms, 54MB)
효율성 테스트
테스트 1 〉 통과 (127.50ms, 82.2MB)
테스트 2 〉 통과 (218.40ms, 90.9MB)
테스트 3 〉 통과 (284.19ms, 90.4MB)
테스트 4 〉 통과 (301.77ms, 97.3MB)
테스트 5 〉 통과 (322.45ms, 95.6MB)
채점 결과
정확성: 50.0
효율성: 50.0
합계: 100.0 / 100.0