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

 

프로그래머스

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

programmers.co.kr

 

 

이 문제푸는데 2시간정도 걸렸는데, 프로그래머스를 처음 사용해봐서 시간이 더 걸린 것 같습니다.

프로그래머스 풀때는 항상

첫번째. 사용할 함수들 라이브러리 import 합니다.

ArrayList나 Array에 사용되는 - import java.uitl.*;    

String.split ... 에 사용되는 - import java.io.*;

 

두번째. String 비교할시 == 를 사용하는 이유

java에서 == 는 같은 object인지 검사하는것

string.equals(string2); 는 문자열이 같은 내용인지 검사하는것

 

 

이문제를 푼 방식 리뷰

풀이 :

ArrayList<Node>[] 1차원 배열을 만들어서 id_list의 순서대로 muzi, frodo, apeach, neo 가 있다고 생각합니다.

report[4] 배열에서 "apeach muzi"  값을 가져왔다고 가정합니다.

answer값을 리턴할때 각 유저별로 처리결과 메일을 받은 횟수를 배열에 담아 answer로 리턴하는 것이므로

처리될려면 k번 이상되어야하므로 

ArrayList<Node>[]를 suspect(피의자)를 기준으로하여 몇번 신고되었는지 확인하고 k번 이상 신고되었다면

해당 ArrayList<Node>[] 에 있는 모든 내용을 돌면서 해당 reporter의 index에 +=1 을 해주면 해결됩니다.

 

apeach가 muzi를 신고했다는 내용이므로 

ArrayList<Node>[0]에는  Node(apeach, muzi)가 들어갑니다.

 

다른방식도 존재할 수 있는데

그나마 HashTable 방식이 생각납니다. 일단 ArrayList로 풀었습니다.

 

 

 

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

/*
String 비교할떄 == 를 사용하지 않는 이유는
== 는 같은 object 인지 확인하는것임(같은 객체인지)

*/
class Solution {
    
    //1.해야할일 정리
    //배열은 length
    
    static ArrayList<Node>[] reportsuspectarraylist;
    public int[] solution(String[] id_list, String[] report, int k) {
        // System.out.println(id_list.length);
        reportsuspectarraylist = new ArrayList[id_list.length];
        for(int i=0;i<id_list.length;i++){
            reportsuspectarraylist[i] = new ArrayList<Node>();
        }
        //신고받은 report 배열을 돌면서 reporter(신고자)와 suspect(신고당한자)로 나눈뒤
        //유저ID의 인덱스를 찾은뒤 해당 인덱스 arraylist<Node> 1차원배열에 연결시킵니다.
        //연결시키는 과정에서 이전에 신고자,신고당한자와 
        for(int i=0;i<report.length;i++){
            String[] report_split = report[i].split(" ");          
            String reporter = report_split[0];
            String suspect = report_split[1];
            Node node = new Node(reporter, suspect);
            
            for(int j=0;j<id_list.length;j++){
                String id_temp = id_list[j];
                //arraylist순서는 id_list 순서와 같다.
                // System.out.println("id_temp, suspect: " + id_temp + " " + suspect);
                if(id_temp.equals(suspect)){
                    // System.out.println("it's same!");
                    boolean sameflag = false;
                    for(int h=0;h<reportsuspectarraylist[j].size();h++){
                        //만약 신고자 중에 두번째신고라면 sameflag = true( 이미 신고완료한 상태라는 것을 나타냄 ) 로 변환합니다.
                        if(reporter.equals(reportsuspectarraylist[j].get(h).reporter)){
                            sameflag = true;
                            break;    
                        }
                    }
                    
                    //reporter가 이전에 같은 사람을 신고한 전적이 없다면
                    if(sameflag == false){
                            reportsuspectarraylist[j].add(node);
                    }
                }
            }
        }
        
        // print(id_list);
        // System.out.println("what??");
        // for(int i=0;i<reportsuspectarraylist.length;i++){
        //     for(int j=0;j<reportsuspectarraylist[i].size();j++){
        //         System.out.println(" reporter: "+reportsuspectarraylist[i].get(j).reporter + " suspect :" +reportsuspectarraylist[i].get(j).suspect);
        //     }
        //     System.out.println();
        // }
        // System.out.println("what??");
        
        int[] answer = new int[id_list.length];
        for(int i=0;i<reportsuspectarraylist.length;i++){
            if( k <= reportsuspectarraylist[i].size() ){
                for(int j=0;j<reportsuspectarraylist[i].size();j++){
                    for(int h=0;h<id_list.length;h++){
                        if(id_list[h].equals(reportsuspectarraylist[i].get(j).reporter)){
                            answer[h] += 1;
                        }   
                    }
                }
            }
        }
    
        // int[] answer = {};
        
        
        return answer;
    }
    
    class Node{
        String reporter;
        String suspect;
        public Node(){
            
        }
        public Node(String reporter, String suspect){
            this.reporter = reporter;
            this.suspect = suspect;
        }
    }
    
    public void print(String[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.println(" "+arr[i]);
        }
    }
    
}

+ Recent posts