본문 바로가기
코딩테스트/프로그래머스 1단계

프로그래머스 1단계 - 완주하지 못한 선수

by SICDev 2021. 4. 20.
반응형

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

 

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

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

programmers.co.kr

 

 

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String,Integer> hash = new HashMap<String,Integer>();
        //HahMap에 참가한 사람을 put한다.
        //key = 참가한사람명, value = 0 or 1
        //HashMap은 key값이 같은 것을 put할때 value값을 새로운 value값으로 갱신한다.
        //동명이인일경우 key값이 같기 때문에 value값을 갱신한다.
        //갱신을 막기위해 getOrDefault를 쓴다.
        //getOrDefault의 경우 key값이 존재하면 존재하는 key의 value값을 반환한다.
        //key값이 존재하지않으면 두번째 파라미터값을 반환한다.
        //모든 참가자들은 <참가자명,1> 값으로 HashMap에 들어가져있다.
        //(단. 동명이인의 경우 참가자가 <참가자명,2> 값으로 들어간다.)
        for(String arg : participant){
            hash.put(arg, hash.getOrDefault(arg,0)+1);
        }
        
        //HashMap에 완주한 사람을 put한다.
        //HashMap은 키값이 같으면 그 키값의 value값을 갱신한다.
        //기존의 HashMap에 완주한 사람의 key, value값을 put한다.
        //기존의 HashMap에 완주한 사람의 key가 존재하면 value값을 새로운 값(기존의 값 -1)으로 갱신한다.
        for(String arg : completion){
            hash.put(arg, hash.get(arg) - 1);
        }
        
        //완주를 완료한사람은 <참가자명, 0> 값으로 HashMap에 들어가져있다.
        //완주를 하지 못한 사람은 <참가자명, 1> 값으로 HashMap에 들어가져있다.
        for(String key : hash.keySet()){
            //완주를 하지 못한 사람의 참가자명을 return 한다.
            if(hash.get(key) != 0 ) return key;
        }
        
        return null;
    }
}
반응형