728x90
반응형
[문제 링크]
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
📍 코드
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> map = new HashMap<>();
// 참가자 전원 추가
for (String p : participant) {
map.put(p, map.getOrDefault(p, 0) + 1);
}
// 완주한 사람 제거
for (String c : completion) {
int n = map.get(c) - 1;
if(n == 0) map.remove(c); //map에 존재하면 삭제 - 필요 없
else map.put(c, n);
}
// 남은 1명이 완주하지 못한 선수
return map.keySet().iterator().next();
}
}
💡 접근법
- 참가자 전원을
map에 추가 getOrDefault()-> map에 값을 넣을 때, 값이 없으면 0을 넣는다.- 동명이인을 생각하여 값을 +1 하여 체크한다.
- 완주한 사람이 map에 담겨있다면 -1을 하고,
- n의 값이 0이 되면 map에서 삭제한다. => 즉, 완주 했단 뜻
- n이 1 이상이면 다시 put하여 업데이트한다.
- 결과적으로 map의 첫번째 인자값을 반환하면 답이다.
✅ map.keySet().iterator().next();
→ map.keySet() → Map의 모든 key 집합(Set)을 가져옴
→ .iterator() → key 집합을 순회할 수 있는 반복자(Iterator) 생성
→ .next() → 반복자의 첫 번째 key를 가져옴
📍 문제 해결은 되지만 효율성 떨어지는 코드
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
ArrayList<String> list = new ArrayList<>();
// 참가자 전원 리스트에 추가
for (String p : participant) {
list.add(p);
}
// 완주한 사람 제거
for (String c : completion) {
list.remove(c); // 값으로 제거
}
// 남은 1명이 완주하지 못한 선수
return list.get(0);
}
}
- 처음에 위와 같이 작성하였으나 두번째 테스트 케이스에서 실패했다.
sort()를 활용하지 못했다.- 동명이인을 생각하지 못했다.
- 위의 2가지가 원인인 것 같다.
sort()를 하여 작은 값부터 비교를 하면 해결이 된다.
다른 문제를 풀다보면 sort()를 잘 활용하면
간결하게 문제를 해결하는 경우가 종종있다.
이 문제도 그런 케이스이고, sort()의 중요성을 또 한번 깨달았다.
또한, iterator를 잘 다뤄보지 않아서
이 내용도 포스팅할 생각이다.
728x90
반응형
'💻코딩 > 💡Programmers' 카테고리의 다른 글
| [프로그래머스|JAVA] 같은 숫자는 싫어 🙅♀️ | ArrayList, stream 방식, 향상된 for문 활용 (1) | 2025.08.14 |
|---|---|
| [프로그래머스|JAVA] 의상 | 2️⃣번째 풀이 | Map 활용하여 간결 & 가독성 좋게 💡 , 향상된 for문, getOrDefault() (4) | 2025.08.14 |
| [프로그래머스|JAVA] 폰켓몬 | Set 사용 ⭕️ , contains() (2) | 2025.08.14 |
| [프로그래머스|JAVA] 가장 큰 수 찾기 | Level 0 (0) | 2025.08.14 |
| [프로그래머스|JAVA] 자연수 뒤집어 배열로 만들기 | Stream 방식 (1) | 2025.08.14 |
