멍두의 개발새발
[프로그래머스] - 완주하지 못한 선수 in Java (getOrDefault()) 본문
📍 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📍 코드 설명
String 배열 participant와 completion을 비교하여 participant에는 있지만 completion에는 없는 값을 출력하면 된다.
매우 간단한 문제이지만 중복값이 있기때문에 주의해야한다.
1. 전체를 다 돌지 않도록 값을 검색하도록 hashMap을 사용한다. 이 때, name으로 검색하므로 key = name, value = 사람 수를 저장한다.
getOrDefault(키 값, 키 값이 map에 없으면 value에 default로 넣을 값) 를 사용하자
map.getOrDefault(검색할 키 값(여기서는 이름), 만약 키 값이 없으면 넣을 값(여기서는 0)) + 1
으로 해당 값이 있으면 해당 value에 +1을 해주고 처음으로 넣는 값이면 0 + 1을 진행해서 1을 저장한다
2. participant로 map에서 검색한다
3. 만약 해당 name이 map에 없으면 완주하지 못한 선수이므로 for 문 종료
4. 해당 name이 map에 있으나 value가 0이면 동명이인이 있고, 완주하지 못한 선수이므로 for 문 종료
5. 그 외의 경우에는 완주한 선수이므로 map에서 value -1을 해주어 완주한 선수임을 표시
📍 코드
✔️ 코드
import java.util.*;
import java.util.Map.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
//1. 검색해야하므로 Hash에 넣는다, 동명이인이 있을 수 있으므로 value에 사람 수를 넣는다
Map<String, Integer> map = new HashMap<>();
for(String str : completion){
map.put(str, map.getOrDefault(str, 0) + 1);
}
for(String name : participant){
if(!map.containsKey(name)){
answer = name;
break;
}
if(map.get(name) == 0){
answer = name;
break;
}
map.put(name, map.get(name) -1);
}
return answer;
}
}
📍 틀린이유
시간 복잡도를 유의해야하는 문제
map도 중복을 허용하지 않는 자료구조인데 까먹고 그냥 value에 1만 넣었다
📍 기억할 것
getOrDefault를 잘 사용하자
자료구조의 구조와 특징을 완벽히 이해하고 있어야한다
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사하기 in Java (1) | 2024.07.01 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 in Java (1) | 2024.06.28 |
[프로그래머스] 햄버거 만들기 in Java (0) | 2024.06.27 |
[프로그래머스] 콜라츠 추측 in Java (2) | 2024.05.05 |