Algorithms

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

유자맛바나나 2022. 2. 13. 18:06

문제

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

 

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

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

programmers.co.kr

 

오랜만에 공부 시작할 겸 가벼운 문제 풀어봄

 

주의할 점은 완주한 사람(completion)을 기준으로 해시를 만들고 참여한 사람(participant)을찾는 방식이 아니라,

참여한 사람을 기준으로 해시를 만들고 완주한 사람을 찾아야 한다는 것. 

 

그리고 이름이 중복되는 사람이 여러 사람일 수 있으므로 각 사람의 이름을 count 한 후 완주한 사람을 순회할 때 1씩 빼면서 찾아야 한다.

 

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        Map<String, Integer> participantPerson = new ConcurrentHashMap<>();
        for(String parti : participant) {
            if (!participantPerson.containsKey(parti)) {
                participantPerson.put(parti, 1);
            } else {
                participantPerson.put(parti, participantPerson.get(parti) + 1);
            }
        }

        for(String complete : completion) {
            Integer nameCount = participantPerson.get(complete);
            nameCount--;
            if (nameCount == 0) {
                participantPerson.remove(complete);
            } else {
                participantPerson.put(complete, nameCount);
            }
        }
        String remains = (String) participantPerson.keySet().toArray()[0];

        return remains;
    }
}

'Algorithms' 카테고리의 다른 글

[Codility] PermMissingElem  (0) 2022.02.28
[Codility] OddOccurrencesInArray  (0) 2022.02.26
[Codility] CyclicRotation  (0) 2022.02.24
[Codility] BinaryGap  (0) 2022.02.22
[프로그래머스] 모의고사  (0) 2022.02.20