티스토리 뷰

728x90

 

https://programmers.co.kr/learn/courses/30/lessons/42576?language=java 

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr


[ 내가 생각한 풀이 ]

아래의 경우 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
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31