All Honey Tip

프로그래머스 – 가장 많이 받은 선물 Java 풀이

프로그래머스 가장 많이 받은 선물 Java 풀이를 알아보겠습니다. 몇년만에 하는 거 같아서 코드가 안 써지네요..



프로그래머스 – 가장 많이 받은 선물 경로

코딩테스트 연습 > 2024 KAKAO WINTER INTERNSHIP > 가장 많이 받은 선물

프로그래머스 - 가장 많이 받은 선물 Java 풀이
프로그래머스 - 가장 많이 받은 선물 Java 풀이

특별한 알고리즘을 사용하진 않았습니다. 기본 구현 능력을 확인하는 문제이지 않을까 싶습니다.
다음과 같은 프로세스를 생각했습니다.

1. 주고 받은 선물 2차원 배열로 표현
2. 각각의 선물 지수 표현
3. 다음 달에 받을 선물 계산
4. 최댓값 출력

import java.util.*;

class Solution {
    private static int[][] board;   // 주고 받은 선물
    private static int[] giftPoint; // 선물 지수
    private static int[] resultList;// 다음 달에 받을 선물
    public int solution(String[] friends, String[] gifts) {
        int answer = 0;
        board = new int[friends.length][friends.length];
        giftPoint = new int[friends.length];
        resultList = new int[friends.length];
        HashMap<String, Integer> hm = new HashMap<>();

        // 친구 리스트에 각 index 설정을 위함.
        for(int i = 0; i < friends.length; i++)
        {
            hm.put(friends[i], i);
        }

        // 선물을 주고 받은 이력에 따라서 board 구성
        for(String gift : gifts) {
            String[] tmp = gift.split(" ");
            String a = tmp[0];
            String b = tmp[1];
            int aIdx = hm.get(a);
            int bIdx = hm.get(b);

            board[aIdx][bIdx]++;
        }

        // 선물 지수 계산
        for(int i = 0; i < board.length; i++) {
            for(int j = 0; j < board.length; j++) {
                if(i == j)
                    continue;
                giftPoint[i] += board[i][j];
                giftPoint[j] -= board[i][j];
            }

        }

        // 다음 달에 받을 선물 계산
        for(int i = 0; i < board.length; i++) {
            for(int j = 0; j < board.length; j++) {
                if (i == j)
                    continue;
                else if (board[i][j] > board[j][i] ||
                        (board[i][j] == board[j][i] && giftPoint[i] > giftPoint[j]))
                    resultList[i]++;
            }
        }

        // 최댓값 산출
        for(int i = 0; i < resultList.length; i++)
            if(answer < resultList[i])
                answer = resultList[i];


        return answer;
    }
}
프로그래머스 - 가장 많이 받은 선물 Java 풀이

개발자 면접 질문 – Java


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다