문제풀이/Implementation

[PS] Programmers - 신고 결과 받기 with JAVA

IT록흐 2024. 1. 15. 14:57
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

◎ 문제풀이

 

신고에 대한 입력정보가 주어질 때, 신고자에게 가는 메일의 개수를 구하는 문제이다. 

 

문제를 풀때, 두가지를 신경썼다. 

 

1) 유저와 인덱스를 1대1로 매핑하기 위해, HashMap 자료구조를 사용하였다.

2) 신고 객체에서 신고대상의 신고자의 중복을 방지하기 위해, HashSet 자료구조를 사용하였다.

 

 

◎ 코드 

import java.io.*;
import java.util.*;

//신고객체 
public class UserReport{
    
    public String target; // 신고대상자 
    public Set<String> senders = new HashSet(); // 신고자 리스트 ( 중복 방지를 위해 SET 자료구조 사용 )
}

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {

        // HashMap으로 User와 Index 연결하기
        HashMap<String,Integer> idMap = new HashMap();
        for(int i=0;i<id_list.length;i++){
            idMap.put(id_list[i],i);
        }
            
        // User에 대한 신고정보(UserReport) 초기화
        UserReport[] userReports = new UserReport[id_list.length];
        for(int i=0;i<userReports.length;i++){
            userReports[i] = new UserReport();
        }
        
        StringTokenizer st;
        for(String value : report){
            st = new StringTokenizer(value);
            String sender = st.nextToken();
            String target = st.nextToken();
            
            int index = idMap.get(target); // 신고대상 인덱스
            userReports[index].target = target; //  신고대상
            userReports[index].senders.add(sender); // 신고자
        }
        
        //  메일 수 출력하기 
        int[] answer = new int[userReports.length];
        for(int i=0;i<userReports.length;i++){
            if(userReports[i].senders.size() < k) continue;
            
            Iterator iter = userReports[i].senders.iterator();
            
            while(iter.hasNext()){
                String sender = (String)iter.next();
                int index = idMap.get(sender);
                answer[index]++;
            }
        }

        return answer;
    }
}
반응형