안녕하세요, 스코리아입니다.
오늘은 자바(Java)의 Hash(해시)를 이용한 프로그래머스 Lv.1 완주하지 못한 선수 문제를 풀어보겠습니다.
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 마라톤을 참가하는 선수 중 한 명의 선수를 제외하고 모두 완주했습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
- 완주하지 못한 선수를 return 하는 코드를 작성하면 됩니다.
문제에 나와있는 예시를 토대로 설명해 보겠습니다.
participant (참가자) | completion (완주자) | return (미완주자) |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
- mislav 이름을 가진 참여자가 2명 있습니다. 완주자 목록에는 mislav 참여자가 1명이기 때문에 미완주자는 mislav입니다.
- 이와 같이 동명이인이 있을 수 있으므로 Map을 활용하여 key에는 사람 이름을, value에는 참가자 등장 횟수를 기록합니다.
- 완주자에 대해 value를 1씩 감소시킨 후, value가 0이 아닌 key 값을 return 하면 미완주자를 찾을 수 있습니다.
풀이 과정
위의 예시를 토대로 설명한 대로, HashMap을 이용하여 풀이하였습니다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String, Integer> map = new HashMap<>();
for(String p : participant){ // 참가자 목록
map.put(p, map.getOrDefault(p, 0) + 1);
}
for(String c : completion){ // 완주자 목록
map.put(c, map.get(c) - 1);
}
for(String i : map.keySet()){ // 미완주자 찾기
if(map.get(i) != 0){
return i;
}
}
return "";
}
}
- key 값은 참가자의 이름(String)을, value 값에는 참가자 등장 횟수(Integer)를 기록하는 HashMap을 생성하였습니다.
- 참가자 list인 participant을 for문으로 돌려서 map의 key를 참가자 이름으로 하여금 value에 참가자가 없으면 1을 넣고, 참가자가 있으면 그 값에 1을 더해서 넣습니다. 여기서 ". getOrDefault(p,0)"은 key 값이 p인 value가 존재하지 않는다면 0을 가져오고, 존재한다면 해당 value를 가져옵니다.
- 완주자 list인 completion을 for문으로 돌려서 map의 key를 참여자 이름으로 하여금 value에 해당 참여자의 value에서 1을 감소한 값을 저장합니다.
- map.keySet()을 이용하여 map에 대한 for문을 돌리고 value값이 0이 아닌 key 값(미완주자)을 return 합니다.
실행 결과
- 대부분의 테스트는 0~1ms 정도로, 비교적 빠른 모습입니다.
지금까지 자바(Java) 해시를 이용한 프로그래머스 '완주하지 못한 선수' 문제에 대해서 알아보았습니다.
읽어주셔서, 감사합니다.
'JAVA > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 여행 경로 문제 (Java DFS 풀이) (1) | 2024.06.30 |
---|---|
[프로그래머스] 의상 문제 (Java Hash 풀이) (1) | 2023.09.04 |
[프로그래머스] 베스트앨범 문제 (Java Hash 풀이) (2) | 2023.08.20 |
[프로그래머스] 다리를 지나는 트럭 문제 (Java Queue 풀이) (5) | 2023.08.13 |