본문 바로가기

알고리즘/Lv. 1

프로그래머스 92334 신고 결과 받기 자바 풀이

728x90

난이도 : Lv. 1

풀이일 : 2411015

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제


아이디어

  • id_list의 인덱스를 활용해서 문자열을 숫자처럼 사용하자
  • complain 2차원 배열을 만들어, 각 이용자가 신고한 사람의 정보를 저장한다.
  • complain 저장 시, count에 신고 당한 사람의 신고 당한 횟수를 저장한다.
  • 이용자별로 신고한 사람 중 총 신고 횟수가 k 이상인 사람의 수를 출력한다.

전체 풀이 코드

import java.util.HashMap;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int N = id_list.length;
        int[] answer = new int[N];
        int[] counts = new int[N];
        HashMap<String, Integer> people = new HashMap<String, Integer>();
        boolean[][] complain = new boolean[N][N];
        
        // 이름 : 숫자 짝지어주기
        for (int i = 0; i < N; i++) {
            people.put(id_list[i], i);
        }
        
        // 신고 정보 입력 처리
        for (int i = 0; i < report.length; i++) {
            String[] info = report[i].split(" ");
            // 타인에 대한 신고는 한 명당 한 번만 신고 가능
            if (complain[people.get(info[0])][people.get(info[1])] == false) {
                complain[people.get(info[0])][people.get(info[1])] = true;
                counts[people.get(info[1])]++;
            }
        }
        
        // 내가 신고한 사람이 중지당한 사람인지 확인
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (complain[i][j] == true && counts[j] >= k) {
                    answer[i]++;
                }
            }
        }
        
        return answer;
    }
}

느낀점

  • 파이썬으로 풀이하고 바로 자바로 다시 풀이하면서 달라진 것들이 좀 있다.
  • 파이썬에서는 id_list에서 index메소드를 사용했는데, 자바에서는 그런건 할 줄 몰라서, HashMap을 만들어서 모든 이름을 숫자처럼 사용할 수 있도록 이름과 숫자를 짝지어 넣어줬다.
  • 또, 배열의 크기를 지정해줘야 하니까, boolean 2차원 배열을 만들어 내가 신고한 사람의 정보를 기억할 수 있도록 했다. 처음에는 boolean인데 기본 세팅이 null이라 당황했는데, 내가 Boolean[][] 해놔서 그런거였다. 이런 실수 화남