티스토리 뷰

프로그래머스 92334번 - 신고 결과 받기

프로그래머스 92334번 - https://programmers.co.kr/learn/courses/30/lessons/92334
프로그래머스 92334번 - https://programmers.co.kr/learn/courses/30/lessons/92334

 

요구사항

1. 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.

2. 동일한 유저에 대해 여러 번 신고할 경우 신고 횟수는 1회로 처리됩니다.

3. k번 이상 신고된 유저에 대해서는 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.

4. 각 유저별로 처리 결과 메일을 받은 횟수를 유저 ID 순으로 배열로 반환하라.

 

 

요구사항 분석 및  풀이과정

1. 신고당한 사람을 키로, 신고한 사람들을 값으로 하여 HashMap을 이용하여 신고에 대한 정보들을 기록합니다.

2. 신고당한 사람들을 조회하여 신고한 유저가 수가 k명 이상이면 신고한 유저들은 처리 결과 메일을 받을 것이기 때문에 각 유저별로 처리 결과 메일을 받는 횟수를 누적하여줍니다.

3. 유저 ID 순으로 기록을 하여 야하기 때문에 2번의 결과를 구할 때 LinkedHashMap을 사용합니다.

 

소스코드 작성

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

class Solution {

	private static Map<String, Set<String>> summaryReport(String[] reports) {
		Map<String, Set<String>> table = new HashMap<>();
		for (String report : reports) {
			String[] tokens = report.split(" ");
			String from = tokens[0];
			String to = tokens[1];

			table.computeIfAbsent(to, (it) -> new HashSet<>()).add(from);
		}

		return table;
	}

	private static Map<String, Integer> counterReport(String[] ids) {
		Map<String, Integer> counter = new LinkedHashMap<>();
		for (String id : ids) {
			counter.put(id, 0);
		}

		return counter;
	}

	public int[] solution(String[] ids, String[] reports, int k) {
		Map<String, Set<String>> summaryReport = summaryReport(reports);
		Map<String, Integer> counterReport = counterReport(ids);

		for (Map.Entry<String, Set<String>> entry : summaryReport.entrySet()) {
			if (entry.getValue().size() < k) {
				continue;
			}

			for (String from : entry.getValue()) {
				counterReport.put(from, counterReport.getOrDefault(from, 0) + 1);
			}
		}

		return counterReport.values().stream().mapToInt(Integer::intValue).toArray();
	}
}

 

결과

 

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함