[Programmers] 완주하지 못한 선수 - Java

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

 

GitHub - jeonghoonb/cote-programmers: Coding Test 문제 풀기 By Programmers

Coding Test 문제 풀기 By Programmers. Contribute to jeonghoonb/cote-programmers development by creating an account on GitHub.

github.com

 

 

 

 

 

첫 번째, 핵심은 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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

728x90
반응형
LIST