ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • compareTo()
  • sort
  • 코틀린
  • 스택/큐
  • reactjs
  • HashMap
  • java
  • dfs
  • BFS
  • git
  • 깃
  • 깃허브
  • PriorityQueue
  • Queue
  • React
  • git bash
  • 해시
  • entrySet
  • DP
  • kotiln
  • 프로그래머스
  • getOrDefault
  • greedy
  • Comparator
  • stack
  • Arrays.sort()
  • 백준
  • Android
  • 안드로이드
  • 프로그래머스 Lv.2

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 : 신고 결과 받기

2022. 2. 18. 19:22

https://programmers.co.kr/learn/courses/30/lessons/92334?language=java 

 

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

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

programmers.co.kr

 

풀이

  • answer : id_list에 담긴 순서대로 각 유저가 받은 결과 메일 수
  • idMap : 유저별 순서 저장 (key : 유저이름, value : 순서)
  • map : 유별 자신을 신고한 유저 (key : 유저이름, value : key를 신고한 유저이름 set)

1. hashmap을 초기화 해준다.

idMap = {muzi=0, frodo=1, apeach=2, neo=3}
map = {muzi=[], neo=[], frodo=[], apeach=[]}


2. report를 split함수로 공백을 기준으로 자른다. (String[] str에 저장)

  • str[0](=신고한 유저)이 map의 key와 같으면 str[1](=신고당한 유저)를 map의 value인 hashset에 넣어준다.
  • 결과는 다음과 같다.
map = {muzi=[apeach], neo=[muzi, frodo], frodo=[muzi, apeach], apeach=[]}


3. 유저별 자신을 신고한 유저가 k명 이상이면, 그 신고한 유저에게 메일을 보내준다(answer 증가)

  • send : 해당 유저를 신고한 유저의 set.
  • neo와 frodo의 send.size가 2명 이상이므로, send에 해당하는 유저 muzi, frodo, apeach 의 순서에 맞는 answer값을 증가시켜준다.
idMap = {muzi=0, frodo=1, apeach=2, neo=3}
map = {muzi=[apeach], neo=[muzi, frodo], frodo=[muzi, apeach], apeach=[]}

 

코드

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length]; // 메일을 받은 횟수
        HashMap<String, Integer> idMap = new HashMap<>(); // 유저 순서저장
        HashMap<String, HashSet<String>> map = new HashMap<>(); // 각 유저별 자신을 신고한 유저 set
        
        // init
        for(int i=0; i<id_list.length;i++){
            idMap.put(id_list[i],i);
            map.put(id_list[i],new HashSet<>());
        }
        
        // 자신을 신고한 유저이름 저장
        for(String r : report){
            String[] str = r.split(" ");
            map.get(str[1]).add(str[0]);
        }
        
        // 유저별 신고당한 횟수가 k보다 많으면 메일보냄
        for(int i=0; i<id_list.length;i++){
            HashSet<String> set = map.get(id_list[i]); // 해당 유저를 신고한 유저 set
            if(set.size() >= k){
                for(String userId : set){
                    // userId가 동일한 순서 answer증가
                    answer[idMap.get(userId)]++;
                }
            }
        }
        
        return answer;
    }
}
저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 : 실패율  (0) 2022.02.20
[Java] 프로그래머스 : 정수 내림차순으로 배치하기  (0) 2022.02.19
[Java] 프로그래머스 : 다트 게임  (0) 2022.02.14
[Java] 프로그래머스 : 비밀지도  (0) 2022.02.14
[Java] 프로그래머스 : 완주하지 못한 선수 (feat. HashMap)  (0) 2022.02.14
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 : 실패율
    • [Java] 프로그래머스 : 정수 내림차순으로 배치하기
    • [Java] 프로그래머스 : 다트 게임
    • [Java] 프로그래머스 : 비밀지도
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바