728x90
반응형
SMALL
# 문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant,
완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
[제한사항]
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
[입출력 예]
## 문제 정리
- participant 중 completion에 없는 사람 찾기
- 동명이인이 없다면 List로 치환 후 contain() 사용하면 되지만,
- 동명이인이 있으니 participant를 Map으로 변환 Map<이름, 동명이인 수>
- Map 변환 후 for문 돌면서 completion에 있는 사람의 Map value 값 -1 차감
- Map value 중 0이 아닌 사람 추출
## 풀이
[소스]
https://github.com/jeonghoonb/cote-programmers/blob/main/src/hash/No_42576.java
첫 번째, 핵심은 9번 라인이다.
즉, String[] 배열을 HashMap<참가자 이름, 동명이인 수>로 변경하는 것이다.
이때, getOrDefault()를 이용하여 key가 동일한 경우(동명이인이 있는 경우) value 값을 누적시키는 것이 포인트이다.
두 번째, 핵심은 16번 라인이다.
keySet()을 써서 푸는 방법도 가능하지만,
이 경우에는 key, value 모두 필요한 상황이기에 처음부터 Entry로 받는 것이 효율적이다.
keySet()을 사용하는 경우에는, value를 get(key) 할 때마다 map 전체를 search 하는 비용이 발생하기 때문이다.
문제 원본
https://school.programmers.co.kr/learn/courses/30/lessons/42576
728x90
반응형
LIST
'Develope > Coding Test' 카테고리의 다른 글
[Programmers] 기능 개발 - Java (스택 / 큐) (0) | 2022.08.23 |
---|---|
[Programmers] 같은 숫자는 싫어 - Java (스택 / 큐) (0) | 2022.08.18 |
[Programmers] 신고 결과 받기 - Java (0) | 2022.08.12 |
[Programmers] 폰켓몬 - Java (0) | 2022.08.12 |
[Programmers] 로또의 최고 순위와 최저 순위 - Java (0) | 2022.08.11 |