반응형

문제는 아래 사이트에서 풀었습니다.

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

 

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

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

programmers.co.kr

 

 

풀이 및 코드

 /*
        * 풀이 요약
        * map을 만들어서 기록한다.
        * 
        * 무엇을 기록하나? 참가자명단을 이름:인원수 로 기록
        * 기본적으로 이름:1 이런식으로 기록되고 동명이인의 경우엔 그 수(n) 만큼 이름:n 형태로 기록됨
        * 
        * 완주자들의 이름을 key 로 하여 value를 하나씩 감소
        * 
        * 숫자가 0이 되지 않는 사람이 완주하지 못한 선수
        * */

import java.util.*;

public class Solution {

    public String solution(String[] participant, String[] completion) {

        /*
         * 풀이 요약
         * map을 만들어서 기록한다.
         *
         * 무엇을 기록하나? 참가자명단을 이름:인원수 로 기록
         * 기본적으로 이름:1 이런식으로 기록되고 동명이인의 경우엔 그 수(n) 만큼 이름:n 형태로 기록됨
         *
         * 완주자들의 이름을 key 로 하여 value를 하나씩 감소
         *
         * 숫자가 0이 되지 않는 사람이 완주하지 못한 선수
         * */

        String answer = "";

        //map 을 만든다.
        Map<String, Integer> map = new HashMap<>();

        // 참가자들을 맵에 집어넣는다.
        // value는 기본적으로 1을 넣어주는데,
        // 동명이인이 있을 수 있으므로 value에 1씩 증가시킨다.
        for (int i = 0; i < participant.length; i++) {
            map.put(participant[i], map.getOrDefault(participant[i], 0) + 1);
        }

        // 앞서 입력한 참가자 명단에서 완주자에 대한 처리를 한다.
        // 완주했으면 해당 이름을 찾아 value 를 1 감소시킨다.
        for (int i = 0; i < completion.length; i++) {
            map.put(completion[i], map.getOrDefault(completion[i], 0) - 1);
        }

        //그럼 맵에서 값이 0이 아닌 애가 완주하지 못한 선수겠지?
        for (String name : map.keySet()) {
            if (map.get(name) != 0) {
                answer = name;
            }
        }

        return answer;
    }

}//class
반응형

'개발 > 알고리즘' 카테고리의 다른 글

[USACO] Swapity Swap JAVA  (0) 2021.02.23
[USACO] Triangles JAVA  (0) 2021.02.22
[프로그래머스] 모의고사 JAVA  (0) 2021.02.21
[USACO] Daisy Chains (C언어)  (0) 2021.02.17
[USACO] Do You Know Your ABCs? (C언어)  (0) 2021.02.17
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기