프로그래머스 코딩테스트 연습의 문제입니다.

 

https://programmers.co.kr/learn/courses/30/lessons/92334

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

 

 

 

문제 자체는 간단한 시뮬레이션입니다.

주의해야할 점은 신고를 당한 이용자가 아닌 신고자에게 결과를 보내야한다는 점,

그리고 같은 신고를 여러번 하는 경우를 예외처리해 하나로 카운팅 해야 한다는 점 입니다.

 

저는 HashMap 자료구조를 활용해 이용자의 id를 Integer로 연결시키고,

같은 크기의 배열을 활용해 신고 기록을 저장, 활용했습니다.

이용자의 전체 크기가 최대 1000명이기 때문에 해당 2차원 배열의 크기는 1000x1000으로 코딩테스트에서 사용하기에 큰 무리가 없다고 생각했습니다.

 

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class q92334_Programmers_신고결과받기 {

	static String[] id_list = { "muzi", "frodo", "apeach", "neo" };
	static String[] report = { "muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi" };
	static int k = 2;

	public static void main(String[] args) {

		int user = id_list.length;
		boolean[][] log = new boolean[user][user];
		int[] count = new int[user];
		int[] answer = new int[user];
		Map<String, Integer> map = new HashMap<String, Integer>();

		for (int i = 0; i < id_list.length; i++) {
			map.put(id_list[i], i);
		}

		for (int i = 0; i < report.length; i++) {
			StringTokenizer st = new StringTokenizer(report[i]);
			int reporter = map.get(st.nextToken());
			int target = map.get(st.nextToken());

			if (!log[reporter][target]) {
				log[reporter][target] = true;
				count[target]++;
			}
		}
		
		for(int i = 0; i < id_list.length; i++) {
			if(count[i] >= k) {
				for(int j = 0; j < id_list.length; j++) {
					if(log[j][i]) {
						answer[j]++;
					}
				}
			}
		}
		
		System.out.println(Arrays.toString(answer));
	}
}

 

728x90

+ Recent posts