티스토리 뷰
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
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 베스트앨범 (0) | 2022.04.19 |
---|---|
[프로그래머스] 위장 (0) | 2022.04.01 |
[LeetCode] Valid Palindrome (0) | 2022.03.31 |
[LeetCode] Group Anagrams (0) | 2022.03.31 |
[프로그래머스] 전화번호 목록 (0) | 2022.03.31 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크