코딩테스트 공부/java

프로그래머스 2024 KAKAO WINTER INTERNSHIP lv1. 가장 많이 받은 선물

책다니엘 2024. 12. 17. 05:18

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

나의 풀이

import java.util.ArrayList;
import java.util.Arrays;
class Solution {
    public int solution(String[] friends, String[] gifts) {
        int answer = 0;
        ArrayList<String> friendsAsList = new ArrayList<>(Arrays.asList(friends));

		// 선물 주고받은 행렬
		int[][] giftArea = new int[friends.length][friends.length];
		for (int i = 0; i < giftArea.length; i++) {
			for (int j = 0; j < giftArea.length; j++) {
				giftArea[i][j] = 0;
			}
		}

		// 선물 채워넣기
		for (int i = 0; i < gifts.length; i++) {
			String[] tmp = gifts[i].split(" ");
			giftArea[friendsAsList.indexOf(tmp[0])][friendsAsList.indexOf(tmp[1])]++;
		}

		// 선물지수
		int[][] giftScore = new int[friends.length][3];
		for (int i = 0; i < friends.length; i++) {
			for (int j = 0; j < 3; j++) {
				giftScore[i][j] = 0;
			}
		}

		// 준 선물
		for (int i = 0; i < friends.length; i++) {
			for (int j = 0; j < friends.length; j++) {
				giftScore[i][0] += giftArea[i][j];
				giftScore[i][1] += giftArea[j][i];
			}
			giftScore[i][2] += giftScore[i][0] - giftScore[i][1];
		}

		// 최종 선물 행렬
		int[] finalArr = new int[friends.length];
		for (int i = 0; i < finalArr.length; i++) {
			finalArr[i] = 0;
		}

		for (int i = 0; i < friends.length; i++) {
			for (int j = 0; j < friends.length; j++) {
				if (i != j && giftArea[i][j] > giftArea[j][i]) {
					finalArr[i]++;
				} else if (i != j && giftArea[i][j] < giftArea[j][i]) {
					finalArr[j]++;

				} else if (i != j && giftArea[i][j] == giftArea[j][i]) {
					if (giftScore[i][2] > giftScore[j][2]) {
						finalArr[i]++;
					} else if (giftScore[i][2] < giftScore[j][2]) {
						finalArr[j]++;
					}
				}
			}
		}

		answer = Arrays.stream(finalArr).max().getAsInt() / 2;
        return answer;
    }
}