프로그래머스 코딩테스트 고득점 Kit_해시_완주하지 못한 선수

Minhee kang·2021년 7월 8일
0

문제 보러 가기 👈 클릭!

💡 풀이

✔ 첫번째 시도_풀이 방법 (정확성과 효율성 모두 통과 못함)

참가자들의 이름이 key, 값이 -1(동명이인 참가자가 있으면 해당값 -1 해줘서 값이 -2)인 딕셔너리 생성. 해당 딕셔너리에서 완주한 참가자가 key로 존재하는 값을 +1해줌. 그러면 딕셔너리는 '완주한 참가자 이름' : 0, '완주하지 못한 참가자 이름': 0보다 작은 값이 됨. 이때 0보다 작은 값을 갖는 key(=name)을 return.

✔ 두번째 시도_풀이 방법

입력 받은 리스트들을 정렬하고 순서대로 비교하며 다른 값을 찾아서 return 한다. 다른 값이 없을 때, 완주하지 못한 사람은 무조건 1명이 존재하므로 사전순에 가장 마지막에 있는 참가자의 이름을 return

💡 전체 소스 코드

✔ 첫번째 시도

def solution(participant, completion):
    answer = ''
    
    dict = {}
    for name in participant:
        dict[name] = dict.get(name, 0) - 1 
    
    for name in completion:
        dict[name] += 1
        if dict[name]:
            return name
        
    for name,val in dict.items():
        if val:
            return name

✔ 두번째 시도

def solution(participant, completion):
    answer = ''
    
    participant.sort()
    completion.sort()
    
    for idx, name in enumerate(completion):
        if name != participant[idx]:
            return participant[idx]
    
    return participant[-1]

+ ✔ 자바 풀이

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        
        HashMap<String, Integer> map = new HashMap<>();
        
        for(String nm : participant) {
            map.put(nm, map.getOrDefault(nm, 0) + 1);
        }
        
        for(String nm : completion) {
            map.put(nm, map.get(nm) - 1);
        }
        
        for(String nm : map.keySet()){
            if(map.get(nm) != 0)  return nm;
        }
        
        return "";
    }
}

0개의 댓글

관련 채용 정보