[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
마라톤 참여자 배열 participant 와 완주자 배열 completion이 있을 때, 완주하지 못한 한 명을 구한다.
문제 풀이
알고리즘 분류
- HashMap
1. 배열 사용(내가 푼 방식)
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
//참가자, 완주자 알파벳 순으로 정렬
Arrays.sort(participant);
Arrays.sort(completion);
for(int i = 0; i < participant.length - 1; i++) {
if(!participant[i].equals(completion[i])) {
return participant[i];
}
}
return participant[participant.length - 1];
}
}
참가자, 완주자 배열을 각각 알파벳 오름차순으로 정렬하고, 앞에서부터 하나씩 비교한다.
동일하지 않으면 participant 배열의 선수가 완주하지 못한 선수이므로 출력하고,
비교 후에도 다른게 없다면 participant 배열의 마지막 선수가 완주하지 못한 선수이다.
2. HashMap 사용
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
//map에 참가자 추가
for(String p : participant) {
hm.put(p, hm.getOrDefault(p, 0) + 1);
}
//map에서 완주한 선수 제거
for(String c : completion) {
hm.put(c, hm.get(c) - 1);
}
for(String key : hm.keySet()) {
if(hm.get(key) != 0) {
answer = key;
break;
}
}
return answer;
}
}
참여자 배열 participant를 돌면서 <참여자명, 참여자수> 쌍으로 HashMap에 참여자를 모두 넣는다.
보통은 value=1이지만 동명이인의 경우 value가 2 이상이 될 수 있다. 이 때 getOrDefault() 함수를 사용해서 동명이인까지 세서 값을 저장한다.
→ getOrDefault(Object key, V DefaultValue)
: 찾는 key가 존재하면 해당 key의 value 값 반환, 존재하지 않으면 DefaultValue 반환
완주자 배열 completion을 돌면서 map에서 해당 선수를 key로 가진 value를 1씩 감소해서 완주자를 제거한다.
마지막으로 map을 돌면서 value가 0 이 아닌 key를 찾아서 완주하지 못한 선수를 출력한다.
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 여행경로 (JAVA/자바) (0) | 2025.09.18 |
|---|