공부하는 스누피

[JAVA] 완주하지 못한 선수 - HashMap 본문

Algorithms/코딩테스트 문제풀이

[JAVA] 완주하지 못한 선수 - HashMap

커피맛스누피 2020. 7. 10. 01:19

같은 테스트를 두번 하는건 힘들어요.. (Photo by Snapwire)

https://programmers.co.kr/learn/courses/30/lessons/42576

 

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

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

programmers.co.kr

https://snoop-study.tistory.com/2

 

[JAVA] 완주하지 못한 선수 - ArrayList

https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주.

snoop-study.tistory.com

저번에는 ArrayList로 풀어서 시간 초과로 실패해버렸는데 이번에는 hash로 풀어보았습니다.

덕분에 HashMap을 실전에서는 처음 써본 것 같네요ㅎㅎ ArrayList보다 훨씬 쉬웠습니다.

시간복잡도는 O(N)입니다.

 

구현

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        //HashMap 선언
        HashMap <String, Integer> map = new HashMap <String, Integer>();
        
        //완주자 저장
        for(int i=0;i<completion.length;i++){
            if(!map.containsKey(completion[i]))
                map.put(completion[i], 1);
            else
                map.put(completion[i], map.get(completion[i])+1); //hash 업데이트
        }
        
        for(int i=0;i<participant.length;i++){
            //이름이 key값에 존재하지 않음 -> 완주 못함 1
            if(!map.containsKey(participant[i])){
                answer = participant[i];
                break;
            }
            else{
                int num = map.get(participant[i]);
                if(num == 0){
                    //이름이 key값에 존재하지만 카운트 0 -> 완주 못함 2
                    answer = participant[i];
                    break;
                }
                //체크한 참가자는 제거
                map.put(participant[i], map.get(participant[i])-1);
            }
        }
        return answer;
    }
   
}

 

두 번만에 통과,,

 

참고

https://snoop-study.tistory.com/4

 

[JAVA] HashMap 사용법 정리

1. 선언 import java.util.HashMap; HashMap map = new HashMap (); 2. 삽입, 삭제 map.put(key, value); map.remove(key); 3. 출력 - 하나만 map.get(key); - 모두(키값만) Set keys = map.keySet(); for(Key dat..

snoop-study.tistory.com

 

Comments