알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
Think🤔
문제 이해
마라톤 선수 1 ~ 100,000명
마라톤 선수 참여 이름 participant
완주한 이름 배열 completion
동명이인 ok , 참가자 이름 1~20 소문자
참여자에 있고 , 완주자 명단에 없으면 return
문제가 해시니깐 해시로 풀어본다.
Map에는 iterator가 없다.
Map의 iterator를 가져오려면 keySet() , entrySet() , values()를 호출해서 가져와야 한다.
엔트리는 <키,밸류>를 쌍으로 묶는 것
한 쌍을 엔트리라고 한다.
고로 이터레이터를 이용해서 컬렉션을 읽어야 하는데 , Map은 컬렉션프레임워크가 아니여서
엔트리 셋으로 키랑 밸류를 가져와서 iterator를 만들어주고
순서대로 넣은 iter의 다음값을 entry 변수를 만들어줘서, 엔트리의 밸류값이 0이라면
그 값의 키 값을 answer에 담아서 break(찾았으니깐 더 볼 것 없이 종료) 해서 return을 해주면 된다.
Solution✍
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hs = new HashMap<String,Integer>();
for(String pars : participant){
hs.put(pars,hs.getOrDefault(pars,0)+1);
}
for(String comps : completion){
hs.put(comps,hs.get(comps)-1);
}
Iterator<Map.Entry<String,Integer>> iter = hs.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String,Integer> entry = iter.next();
if(entry.getValue() != 0){
answer = entry.getKey();
break;
}
}
return answer;
}
}
Review🤩
참조 영상 https://www.youtube.com/watch?v=7qV5nJ39Lqw
'Algorithm' 카테고리의 다른 글
[프로그래머스] Summer/Winter Coding(~2018)예산 (0) | 2022.05.06 |
---|---|
[프로그래머스] 나누어 떨어지는 숫자 배열 (0) | 2022.05.06 |
[프로그래머스] 나머지가 1이 되는 수 찾기 , 같은 숫자는 (0) | 2022.03.09 |
[백준] 추월 (0) | 2022.03.08 |
[백준] 연속부분최대곱 (0) | 2022.03.01 |