Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags more
Archives
Today
Total
관리 메뉴

공부블로그

[프로그래머스] 신고결과 받기 본문

IT/알고리즘

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

So1_b 2022. 6. 18. 21:32

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

 

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

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

programmers.co.kr

 

<문제설명>

arr[ ][ ]의 논리적 구조

인덱스 신고된 ID 신고자
0 muzi apeach
1 frodo muzi,
apeach
2 apeach  
3 neo frodo,
muzi

(이때 신고ID의 idex와 id[ ]의 인덱스가 동일함.)

 

- idx[ ] = 위 표에서 신고자 배열의 인덱스를 의미함. (arr[ ][ * ]) 

 

- 신고기록인 report[ ]의 문자열을 공백을 기준으로 신고ID( s[1] ), 신고자( s[0] )으로 나누기 위해 for each문에서 split(" ")을 이용한다. 

- id[ ]에서 신고ID의 인덱스를 알아내기 위해 배열(id[ ])을 ArrayList로 변경해 인덱스를 찾는다.

- 신고자를 저장하기 위해 idx[r] == 0이면 중복검사를 하지않고 저장,

   idx[r] > 0이면 중복검사 후 저장한다.

 

- 중복검사는 arr[r]를 set로 변경해 저장할 값을 add한다. 이때 set.size의 값이 동일하면 중복된 값이므로 저장하지 않는다.

 

- arr[ ][ ]에서 신고자를 의미하는 배열의 길이가  k이상일경우 배열을 List로 변경하고

  answer[ id[ ]에서 신고자의 인덱스 ]를 증가시킨다.

import java.util.*;
class Solution {
    public int[] solution(String[] id, String[] report, int k) {
        int[] answer = new int[id.length];
        int[] idx = new int[id.length]; //arr[r][*]의 인덱스
        String[][] arr = new String[id.length][id.length]; //신고id [신고자1,신고자2...]
        
        Arrays.fill(idx, 0);
        
        for(String str: report){
            String[] s = str.split(" ");
            
            //신고id의 id[]인덱스
            int r = new ArrayList<String>(Arrays.asList(id)).indexOf(s[1]); 
            
            //arr[r][]에 신고자 저장
            if(idx[r]<id.length){
                if(idx[r] == 0) arr[r][idx[r]++] = s[0]; //arr[r][*] 비어있음. 그냥 저장
                else{ //비어있지 않음. 중복검사ㅇ
                    
                    Set<String> set = new HashSet<String>(Arrays.asList(arr[r]));
                    int size = set.size();
                    set.add(s[0]);
                    if(size == set.size()) {    //중복된 값을 저장한 것.
                        continue;
                    }else { //새로운 값을 저장
                        arr[r][idx[r]++] = s[0]; //신고자 저장.
                    }
                    
                }   
            }//if
        }//for
       
            for(int i=0; i<id.length; i++){
                if(idx[i]>=k){ //정지
                    for(int j= 0; j<idx[i]; j++){
                        int num = new ArrayList<String>(Arrays.asList(id)).indexOf(arr[i][j]);         
                        answer[num]++;
                    }
                }
            }
        
        return answer;
    }
}
Comments