ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 신고 결과 받기
    개발공부/코딩테스트 연습문제 2022. 1. 17. 14:20

    문제 설명과 제한사항

     

    문제가 길다.

    1. id_list : 유저

    2. report : 신고 내역 ex) "kuna naku" -> kuna가 naku를 신고

    3. k이상 신고가 들어오면 정지 + 신고자(위의 예에서 kuna)에게 메일

    4. 메일을 id_list별로 유저들이 몇통을 받는지.

     

    풀이

    import java.util.*;
    
    class Solution {
        public int[] solution(String[] id_list, String[] report, int k) {
            int[] tmp = new int[id_list.length];
            int[] answer = new int[id_list.length];
            Set<String> set = new HashSet<String>(Arrays.asList(report));
            String[] reportSet = new String[set.size()];
            
            Iterator<String> it = set.iterator();
            for(int i = 0; i < set.size(); i++){
                reportSet[i] = it.next();
            }
            
            for(int i = 0; i < reportSet.length; i++){
                String[] reportSplit = reportSet[i].split(" ");
                tmp[Arrays.asList(id_list).indexOf(reportSplit[1])]++;
            }
            
            for(int i = 0; i < reportSet.length; i++){
                String[] reportSplit = reportSet[i].split(" ");
                if(tmp[Arrays.asList(id_list).indexOf(reportSplit[1])] >= k){
                    answer[Arrays.asList(id_list).indexOf(reportSplit[0])]++;
                }
            }
            return answer;
        }
    }

    코드 설명

     반복문의 중첩(시간복잡도)를 신경쓰다보니 코드가 더러워짐.

    파트는 Iterator 부분을 1

    첫번째 반복문을 2

    두번째 반복문을 3 으로 가정한다.

    0. 선언 : tmp -> 신고된 횟수를 id_list 순서대로 저장

                set,reportSet -> 중복방지를 위한 set

    1. set으로 중복을 없앤 후 배열로 저장하기 위한 부분.

    2. reportSet(중복을 없앤 report)을 " " 기준으로 자름 ex) "kuna naku" -> ["kuna","naku"]

       그리고 reportSplit[1] -> 위의 예 naku 에 해당하는 id_list에 인덱스를 가져와서

       tmp(신고당한 누적 횟수)에 인덱스에 해당하는 숫자를 ++

       그러면 결과적으로 naku가 있는 index 에 신고 횟수가 ++ 됨.

    3. 2와 같은 방식으로 신고 횟수를 k와 비교해서 answer에 ++ 해줌

     

    ++

    생각보다 빠르게 풀렸음.

    근데 또 몇일 쉬었다고 Iterator 랑 set 선언이 기억이 안남... 그리고 indexOf는 기억나는데 arrays.asList 까먹음

    1. SET : Set<String> a = new HashSet<String>();

        -> 배열을 셋으로 : Set<String> a  = new HashSet<Strung>(Arrays.asList(배열));

     

    2. Iterator : set에서 데이터를 하나씩 가져오기 위함

       Iterator b = a.iterator();

       -> b.hasNext() : 보통 while문에서 조건으로 사용됨

       -> b.next() : 인자 하나씩 가져옴.

     

    3. indexOf(<T> a) : List에서 a에 해당되는 인덱스를 반환. 

      List<String> a = new List<String>();

      a.indexOf("Kuna");  : "Kuna"가 있는 인덱스를 반환

      -> 배열에서의 사용법?

      Arrays.asList() : 배열을 리스트로 반환

       -> Arrays.asList(배열 b).indexOf("Kuna");

           배열 b에서 Kuna가 있는 인덱스를 반환

Designed by Tistory.