Map 사용하는 중에 EntrySet 은 떠오르는데 막상 사용할 방법을 몰라서 문제를 돌아서 푼 경험이 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/92334
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 코드
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
HashMap<String,HashSet<String>> reportedMap = new HashMap<>();
HashMap<String,Integer> count = new HashMap<>();
for(String r : report) {
String[] str = r.split(" ");
String userName = str[0]; //신고한사람
String reportName = str[1]; //신고당한 사람
if(!reportedMap.containsKey(reportName)) {
reportedMap.put(reportName,new HashSet<>());
}
reportedMap.get(reportName).add(userName);
}
//reportedMap 순회
for(HashMap.Entry<String,HashSet<String>> entry : reportedMap.entrySet()) {
System.out.println(entry.getKey());
if(entry.getValue().size() >= k) {
for(String name : entry.getValue()) {
count.put(name, count.getOrDefault(name,0)+1);
}
}
}
// System.out.println(count);
int[] answer = new int[id_list.length];
for(int i=0; i<id_list.length; i++) {
answer[i] = count.getOrDefault(id_list[i],0);
}
return answer;
}
}
entrySet() 은 맵에서 key,value 쌍 즉, entry 정보를를 가져와 Set 객체로 변환한다.
iter foreach 를 사용하여 모든 entry 정보에 접근할 수 있다.
entry.getKey() -> 모든 키 값
entry.getValue() -> 모든 밸류 값
for(HashMap.Entry<String,HashSet<String>> entry : reportedMap.entrySet()) {
System.out.println(entry.getKey());
if(entry.getValue().size() >= k) {
for(String name : entry.getValue()) {
count.put(name, count.getOrDefault(name,0)+1);
}
}
}
사용하는 방법은 외워두면 좋다.
또 하나의 방법으론 Stream API 를 사용하여 모든 Key-Value 값에 접근이 가능하다는 것이다.
이는, Stream API 사용방법을 좀 익히고 나서 정리해봐야겠다.
'JAVA 코딩테스트 참고' 카테고리의 다른 글
| 큐 Queue (0) | 2024.08.20 |
|---|---|
| 스택 (0) | 2024.08.20 |