[알고리즘 문제풀이] 프로그래머스 - 완주하지 못한 선수

yourjin·2022년 2월 27일
0

알고리즘 문제풀이

목록 보기
12/28
post-thumbnail

TIL (2022.02.15)

➕ 오늘 푼 문제


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

➕ 아이디어


  • 참가자들을 탐색하며 key = 이름, value = 인원수 로 갖는 해시를 만든다
  • 완주자들을 탐색하며 해시의 key 목록에 있다면 인원수를 줄인다. 인원수가 0이라면 해시에서 제거한다.
  • 문제 조건에 따라서 미완주자는 한명이다. 따라서 해시에 남은 한 사람의 이름을 반환한다.

➕ Java 코드


import java.util.*;

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

➕ Python 코드


def solution(participant, completion):
    _dict = {}
    
    for p in participant:
        if p not in _dict.keys():
            _dict[p] = 1
        else:
            _dict[p] += 1
    
    for c in completion:
        if c in _dict.keys():
            _dict[c] -= 1
            if _dict[c] == 0:
                _dict.pop(c)
    
    return list(_dict.keys())[0]

➕ 궁금한 내용 및 소감


  • 해시(파이썬에서는 딕셔너리, 자바에서는 맵)의 삽입, 삭제, 수정, 조회 메소드를 모두 알아야지 풀 수 있는 문제로, 기본적인 함수들을 익힐 수 있어서 좋았다. 특히 자바는 아직 함수들이 눈에 익지 않아서 많이 찾아보면서 했다. 이번에 한번 짚고 넘어갈 수 있어서 좋았다.
  • 다른 사람들의 풀이를 보니, 자바의 경우 map.getOrDefault(key, default) 메소드로 쉽게 초기화 할 수 있었다. 다음번에 활용해 보면 좋을 것 같다!

➕ 참고 문헌


profile
make it mine, make it yours

0개의 댓글