ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 신고 결과 받기 2022 카카오 신입 공채 1차 온라인 코딩테스트 1번문제
    카테고리 없음 2022. 7. 31. 08:24
    728x90

    소개

    이 전에 문제를 풀고 느낀건데 항상 문제를 보면
    머리로 생각을 하는데 이걸 그냥 생각만하는게아니라 위에 문제처럼 애초에 단계를 적어두면 좀 수월하게 풀리는거같아서
    에디터에 일단 어떻게 해야지라고 적어두고 풀었습니다. 기억력이 좋으면 상관없지만
    저는 굉장히 머리가 안좋은 편이기떄문에 적으면서 풀려구요

     

    아래 문제입니다. 아래문제는 어떻게 할지 단계를 주고 문제를 풀라고해요

     

    카카오 코딩테스트 아이디 추천(프로그래머스)[Java]

    소개 블로그 이전 후 다시 티스토리로 오고나서 정말 오랜만에 쓰는 글이네요https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭..

    fast-it.tistory.com

    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    import java.util.function.DoubleUnaryOperator;
    import java.util.stream.Collectors;
    
    import javax.swing.plaf.basic.BasicListUI;
    
    class Solution {
        static int[] solution(String[] id_list, String[] report, int k) {
            //1. [유저, list(유저가 신고한 아이디 들)]로 배열을 만들어준다
            //2.신고당한 애들을 토대로 정지를 주고 정지당한 애들로 따로 배열을 만들어주고
            //3. 신고당한 애들하고 모든 유저가 신고한 아이디들을 비교해주면서 Countgㅐ준다
            //4. 한 유저가 여러번 신고한건 1회로 측정
            int[] answer = new int[id_list.length];
    
            List<String[]> report_list = new ArrayList<>();
            List<String> ban = new ArrayList<>(); //신고당한 애들
            List<String> banList = new ArrayList<>();//정지당한애들
    
            
            for(int i = 0; i < id_list.length; i++){
                String[] temp = {id_list[i],new String()};
                report_list.add(temp);
            }
    
    
            List<String> temp = new ArrayList<>();
            for(var x : report){
                temp.add(x);
            }
            List<String> notOverlap_report = temp.stream().distinct().collect(Collectors.toList());
            for(var x : notOverlap_report){
                String[] arr = x.split(" ");
                int idx = Arrays.asList(id_list).indexOf(arr[0]);
                
                report_list.get(idx)[1] += arr[1] + " ";
                ban.add(arr[1]);
            }
            //k번 이상 신고당한 애들 정지 리스트에 추가
            for(var x : id_list){
                if(k <= Collections.frequency(ban, x)){
                    banList.add(x);
                }
            }
    
            for(int i = 0; i < id_list.length; i++){
                String[] arr = report_list.get(i)[1].split(" ");
                int count = 0;
                for(var x : arr){
                    if(banList.indexOf(x) != -1){
                        count++;
                    }
                }
                answer[i] = count;
    
            }
            System.out.println(Arrays.toString(answer));
            return answer;
        }
    }

    후기

    처음에 제출했을떄 4점이떳는데 문제가 중복을 생각하지않았습니다.

    자꾸 테스트가 통과되지않는다면 한 유저가 여러번 신고한건 1회로 치환하는걸 잊지않았나 생각해보세요

     

    일어나자마자 푼거라 코드가 많이 더럽네요 근데 충분히 읽을만 한거같으니까 리팩토링은 하지않겠습니다

    728x90
Designed by Tistory.