코딩테스트
[프로그래머스] 완주하지 못한 선수
gajy
2022. 3. 31. 00:29
728x90
https://programmers.co.kr/learn/courses/30/lessons/42576?language=java
[ 내가 생각한 풀이 ]
아래의 경우 answer를 return 하였다.
1. 완주자 이름에 참가자 이름이 아예 없는 경우
2. (중복 케이스) 참가자, 완주자 각각 이름 개수를 체크하여, 참가자 개수가 많은 경우
결과: 효율성 테스트 실패
이중 for문으로 작성한 부분을 제거하였지만, 여전히 효율성 4개의 case에서 실패하였다.
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
class Solution {
public String solution(String[] participant, String[] completion) {
List<String> participants = Arrays.asList(participant);
List<String> completions = Arrays.asList(completion);
for(String part : participant) {
if(Collections.frequency(participants, part) > Collections.frequency(completions, part) || //중복되는 이름이 포함 되는 경우
!completions.contains(part)){ //아예 포함하지 않는 경우
return part;
}
}
return "";
}
}
[ HashMap 사용 풀이 참고 ]
HashMap으로 문제를 풀 경우 검색이 빨라지므로, 모든 성능테스트 또한 패스할 수 있었다.
** getOrDefault 사용
import java.util.Map;
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> hm = new HashMap<String, Integer>();
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 player : hm.keySet()) {
if(hm.get(player) > 0) {
return player;
}
}
return "";
}
}
728x90