개?발/프로그래머스

가장 많이 받은 선물 (Java)

YUEIC 2024. 4. 24. 16:59

 

기본적인 틀은 friends 를 행 열로 하는 2차원 배열을 하나 생성 후 각 행이 열에게 선물을 준 회수를 저장하고
선물지수를 저장하는 1차원 배열 한 개와

다음 달 선물을 받을 수치를 저장할 배열 한 개를 만들어 그 중 가장 큰 수를 반환하는 형태로 구성했다.

    public int solution(String[] friends, String[] gifts) {
        int answer = 0;

        int[][] giveList = new int[friends.length][friends.length];//주고받은 선물 수
        int[] giveAndTake = new int[friends.length];    //선물지수
        int[] nextMonth = new int[friends.length];      //다음달에 받을 선물
        
        for(int i = 0 ; i < friends.length; ++i){       //friends 행
            for(int j = 0 ; j< gifts.length; ++j){      //friends 열
                String[] gt = gifts[j].split(" ");  //gifts가 "준사람 받은사람"으로 구성되어있기 때문에 띄어쓰기를 기준으로 나눠주고 배열에 저장한다.
                if(gt[0].equals(friends[i])){           //준사람이 현재 탐색중인 friends와 동일하면
                    giveAndTake[i]++;                   //선물지수를 +1
                    int a = Arrays.asList(friends).indexOf(gt[1]);  //받은사람의 text를 탐색하여 friends의 몇번째 index인지 저장
                    giveList[i][a]++;                   //현재 탐색중인 friends행, 선물을 준 friends 열의 값에 +1 
                }else if(gt[1].equals(friends[i])){     //현재 탐색중인 friends가 선물을 받았다면
                    giveAndTake[i]--;                   //선물지수를 -1
                }
            }
        }

        for(int i = 0 ; i < friends.length; ++i){       //friends 행
            for(int j = 0 ; j < friends.length; ++j){   //friedns 열
                if(giveList[i] != giveList[j]){         //본인이 본인에게 줄 수 없으므로 필터링을 함
                    if(giveList[i][j] > giveList[j][i]){//행에 해당하는 friends가 열에 해당하는 friends에게 더 많이 줬다면
                        nextMonth[i]++;                 //다음달 받을 선물을 +1
                    }else if(giveList[i][j] == giveList[j][i]){ //서로 주고받은 선물의 수가 동일할 경우
                        //행에 해당하는 friends의 선물지수가 높으면 다음달 받을 선물+1 아니면 +0
                        nextMonth[i] = giveAndTake[i] > giveAndTake[j] ? nextMonth[i] + 1 : nextMonth[i] + 0;
                    }
                }
            }
        }

        Arrays.sort(nextMonth);

        answer = nextMonth[nextMonth.length - 1];

        return answer;
    }

'개?발 > 프로그래머스' 카테고리의 다른 글

달리기 경주  (1) 2024.04.26
명예의 전당  (0) 2024.04.25
바탕화면 정리(Java)  (0) 2024.04.24
두 원 사이의 정수 쌍 C#  (0) 2024.04.24
프로그래머스 짝지어 제거하기  (0) 2024.04.24