본문 바로가기
알고리즘

Programmers - 완주하지 못한 선수(Java)

by 장중앙 2021. 11. 2.

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

 

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

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

programmers.co.kr

 

풀이

Map을 이용하여 풀이

1. Participant를 탐색하면서 map에 이름이 있으면 map[key]+=1로 수정, 

                                                       없으면 map[key]=1로 할당 

2. completion을 탐색하면서 해당 이름을 key로 가지고 있는 map의 value를 -1, value가 0이면 map에서 key삭제

3. map을 탐색(2번이 정상적으로 구현되었다면 한개의 key만 남아있음) 남아있는 key의 값을 return

 

* List로 먼저 풀어봤지만 시간 초과 -> Map은 탐색에서 성능이 우수하기 때문에 

* Java를 사용해본적이 없어 함수의 유무나 사용방법에 어려움이 있음

  ex) map에 하나의 key만 남아있는 상황이지만, 다른 방법이 생각나지 않아 for문을 이용하여 key를 확인

 

 

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> map = new HashMap<>();
        for(String name:participant){
            if(map.containsKey(name))
                map.put(name, map.get(name)+1);
            else
                map.put(name, 1);
        }
        
        for(String name:completion){
            if(map.containsKey(name))
                map.put(name, map.get(name)-1);
        }
        for(String key: map.keySet()){
            if(map.get(key)>0){
                answer=key;
                break;
            }
        }
        
        return answer;
    }
}

댓글