Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 백준
- 인텔리제이
- 스택
- 구간합구하기
- OOP
- 코드스테이츠
- 재귀와반복문
- vm인스턴스생성
- 11659
- String.valueOf()
- 백준 11659
- java
- GCP
- Array.asList
- 클라우드에서 도커 실행하기
- 투포인터알고리즘
- 자바
- 코드스테이츠 백엔드
- 버블정렬
- MySQL
- 프로그래머스
- 알고리즘
- Spring MVC 동작원리
- 재귀함수
- 코딩테스트
- 성능테스트툴
- Spring MVC 구성요소
- List.of
- Spring Web MVC
- 싱글톤패턴
Archives
- Today
- Total
순간을 기록으로
[Java] 신고 결과 받기 | 프로그래머스 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/92334
풀이
레벨 1에 있지만 레벨 1이 아닌 거 같은 문제. 접근하는 방법이 어려워서 고민을 많이 했다.
HashSet과 HashMap을 이용해서 풀 수 있는 문제다.
문제 풀이 순서는 크게 다음과 같다.
- HashSet을 이용해서 report에서 중복을 제거하기
- 문제에서 조건이 있을 경우 초반에 조건을 처리하지 않으면 코딩을 할수록 문제가 어려워질 수 있다.
- HashSet<String> uniqueReport = new HashSet<>();
- HashMap과 ArrayList를 사용해서 신고자 목록 구하기
- 신고당한 사람이 Key가 되고 신고자 리스트를 value로 가지는 Map을 만든다
- HashMap<String, ArrayList<String>> reporterListMap = new HashMap<>();
- 정지된 사용자를 신고자에게 이메일로 알려주기 위한 이메일 전송 횟수를 담을 Map 만들기
- 신고자가 Key가 되고 이메일을 받는 횟수를 value로 하는 Map을 만든다
- HashMap<String, Integer> countEmailMap = new HashMap<>();
- 정답 구하기
소스코드
package 프로그래머스.레벨2.신고결과받기;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
public class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length]; // id_list 길이로 설정
// 1.중복제거
HashSet<String> uniqueReport = new HashSet<>();
for(String str : report) {
uniqueReport.add(str);
}
// 2.신고자 List Map 만들기
HashMap<String, ArrayList<String>> reporterListMap = new HashMap<>();
for (String str : uniqueReport) {
String[] temp = str.split(" ");
String reporter = temp[0];
String reportee = temp[1];
ArrayList<String> reporterList = reporterListMap.getOrDefault(reportee, null);
if (reporterList == null) reporterList = new ArrayList<>();
reporterList.add(reporter);
reporterListMap.put(reportee, reporterList);
}
// 3.이메일 받을 횟수를 저장할 Map 만들기
HashMap<String, Integer> countEmailMap = new HashMap<>();
for (ArrayList<String> reporterList : reporterListMap.values()) {
if (reporterList.size() >= k)
for (String reporter : reporterList)
countEmailMap.put(reporter, countEmailMap.getOrDefault(reporter,0)+1);
}
// 4.numOfEmailMap을 사용해서 정답 구하기
for (int i=0; i< id_list.length; i++) {
answer[i] = countEmailMap.getOrDefault(id_list[i], 0);
}
return answer;
}
public static void main(String[] args) {
Solution sol = new Solution();
String[] id_list = {"muzi", "frodo", "apeach", "neo"};
String[] report = {"muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"};
int k = 2;
// String[] id_list = {"con", "ryan"};
// String[] report = {"ryan con", "ryan con", "ryan con", "ryan con"};
// int k = 3;
sol.solution(id_list, report, k);
}
}
Reference
https://www.youtube.com/watch?v=ncCUNOJUn9Q
'Problem Solving' 카테고리의 다른 글
[Java] 문장 속 가장 긴 단어 찾기 | 인프런 (0) | 2022.04.19 |
---|---|
[인프런] 대소문자 변환 | 문자열 (0) | 2022.04.18 |
[Java] 나머지가 1이 되는 수 찾기 | 프로그래머스 (0) | 2022.04.18 |
[MySQL] 국가명이 들어간 수도명을 확장자와 분리하기 (0) | 2022.04.18 |
[MySQL] 수도명이 국가명보다 길고 수도명 안에 국가명이 있는 나라 찾기 (0) | 2022.04.18 |
Comments