[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
마라톤 참여자 배열 participant 와 완주자 배열 completion이 있을 때, 완주하지 못한 한 명을 구한다.
문제 풀이
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;
}
}
Map의 참여자 모두를 넣고 value를 1씩 증가시킨다.(동명이인이 있을 수 있기 때문)
→ getOrDefault() 사용
완주자 배열 completion을 돌면서 map에서 해당 선수를 key로 가진 value를 1씩 감소해서 완주자를 제거한다.
마지막으로 map을 돌면서 value가 0 이 아닌 key를 찾아서 완주하지 못한 선수를 출력한다.
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][Java] 여행경로 (0) | 2025.09.18 |
|---|