문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
최종 코드
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String,Integer> resultMap = new HashMap<>();
// getOrDefault 동명이인일 경우 같은 키로 접근하여 value를 +1
for(String name : participant) {
resultMap.put(name, resultMap.getOrDefault(name, 0) + 1);
}
// Map에서 값을 업데이트 해주려면 put으로 해줘야 업데이트가 가능
for(String name : completion) {
resultMap.put(name, resultMap.getOrDefault(name, 0) - 1);
}
// Map의 value가 0이 아닌 name return
for(String result : resultMap.keySet()) {
if(resultMap.get(result) != 0){
answer = result;
}
}
return answer;
}
}
이 문제는 단순히 두 배열을 비교하는 문제라고 생각하면 된다.
처음 배열을 List로 바꿔서 하나씩 지워볼까 생각했지만 너무 비효율 적인 방법이라고 생각했다.
다음 정렬을 시켜서 비교를 할까 생각했지만 그 역시 효과적인 방법이라고 생각하지 않았다.
그래서 생각한게 Map을 사용하여 해당 name의 value값을 조정하여 처리를 해보자 생각했다.
동명이인이 있을경우엔 동일한 key로 접근해야 하기 때문에 getOrDefault 함수로 처리했고
간단하게 int로 value 값을 관리하였다.
1. 참여자 명단을 key값으로 저장하여 해당 key 의 value를 1로 세팅
2. 완주자 명단에 있는 key값으로 접근하여 해당 key의 value를 -1
3. Map에 value가 0이 아닌 key를 return
getOrDefault 함수?
✔ getOrDefault(key, defaultValue)는 Java의 HashMap에서 특정 키의 값이 존재하면 가져오고, 없으면 기본값을 반환하는 메서드입니다.
✔ 만약 key가 map에 없으면, defaultValue가 반환됩니다.
✔ 사용 예: 카운트, 초기값 설정, 기본값 처리 등에 유용합니다!
getOrDefault() vs containsKey() 차이점
getOrDefault(key, defaultValue) | key가 있으면 값 반환, 없으면 기본값 반환 | map.getOrDefault("grape", 0) → 0 |
containsKey(key) | key가 존재하는지 확인 (true/false 반환) | map.containsKey("grape") → false |
✔ getOrDefault()는 값 자체를 반환하지만, containsKey()는 존재 여부만 확인!
✔ 값이 필요하면 getOrDefault()를, 존재 여부만 확인하려면 containsKey()를 사용!
'코딩테스트' 카테고리의 다른 글
[코딩테스트] programmers - 기능 개발 (알고리즘 고득점 kit) [JAVA] (0) | 2025.03.13 |
---|---|
[코딩테스트] programmers - 같은 숫자는 싫어 (알고리즘 고득점 kit) [JAVA] (0) | 2025.03.11 |
[코딩테스트] programmers - 네트워크 (알고리즘 고득점 kit) [JAVA] (1) | 2025.02.02 |
[코딩테스트] programmers - 타겟넘버 (알고리즘 고득점 kit) [JAVA] (1) | 2025.01.25 |
[코딩테스트] programmers - 폰켓몬 (알고리즘 고득점 kit) [JAVA] (1) | 2025.01.13 |