‡ CODING TEST STUDY ‡/º 프로그래머스

[프로그래머스 | Java | 2024 KAKAO WINTER INTERNSHIP] 가장 많이 받은 선물

Trudy | 송연 2024. 6. 17. 10:48

문제

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

 

프로그래머스

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

programmers.co.kr


접근

주어진 예시처럼 직관적으로 하나하나 구현하니까 성공했다! 

 

최종 코드 

package week7.baek.kakao2024winter;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;

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

        HashMap<String, Integer> name = new HashMap<>();
        for (int i = 0; i < friends.length ; i++) {
            name.put(friends[i], i);
        }

        //주고 받은 선물 표로 나타내기
        int[][] present = new int[friends.length][friends.length];

        for (int i = 0; i < gifts.length; i++) {
            String sender = gifts[i].split(" ")[0];
            String receiver = gifts[i].split(" ")[1];

            present[name.get(sender)][name.get(receiver)]++;

        }

        for (int i = 0; i < friends.length; i++) {
            for (int j = 0; j < friends.length; j++) {
                System.out.print(present[i][j] + " ");
            }
            System.out.println();
        }

        //선물 지수 계산
        int[] presentGrades = new int[friends.length];
        for (int i = 0; i < friends.length; i++) {
            int sent = 0;
            int received = 0;

            for (int j = 0; j < friends.length; j++) {
                sent += present[i][j];
                received += present[j][i];
            }

            presentGrades[i] = received - sent;
            System.out.println(presentGrades[i]);
        }


        //선물 예측
        int[] presentPredict = new int[friends.length];
        for (int i = 0; i < friends.length; i++) {
            for (int j = i+1; j < friends.length; j++) {
                //서로 준 선물의 수가 같을 때 = 선물 지수 비교
                if(present[i][j] == present[j][i]){
                    if(presentGrades[i] > presentGrades[j]) presentPredict[i]++;
                    else if(presentGrades[i] < presentGrades[j]) presentPredict[j]++;
                }

                //i가 더 많이 선물은 준 경우 - i가 받음
                else if(present[i][j] > present[j][i]){
                    presentPredict[i]++;
                }

                //j가 더 많이 선물은 준 경우 - j가 받음
                else if(present[i][j] < present[j][i]){
                    presentPredict[j]++;
                }
            }
        }

        Arrays.sort(presentPredict);

        return presentPredict[friends.length - 1];
    }

    public static void main(String[] args) {
//        String[] friends = {"muzi", "ryan", "frodo", "neo"};
//        String[] gifts = {"muzi frodo", "muzi frodo", "ryan muzi", "ryan muzi", "ryan muzi", "frodo muzi", "frodo ryan", "neo muzi"};

        String[] friends = {"joy", "brad", "alessandro", "conan", "david"};
        String[] gifts = {"alessandro brad", "alessandro joy", "alessandro conan", "david alessandro", "alessandro david"};

        System.out.println(solution(friends,gifts));
    }
}