본문 바로가기
알고리즘

[프로그래머스/JAVA] 가장 많이 받은 선물

by writing turtle 2024. 11. 7.

문제출처 : https://school.programmers.co.kr/learn/courses/30/lessons/258712

 

프로그래머스

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

programmers.co.kr

 

 

다음달에 가장 많은 선물을 받을 친구의 선물 개수를 구하는 문제

 

조건

1) 서로 선물을 주고 받은 경우 더 많이 준 사람이 다음달에 선물 1개를 받는다.

2) 서로 주고받은 선물의 개수가 같거나 주고받지 않았다면 '선물지수'가 높은 사람이 다음달에 선물 1개를 받는다.

3) 선물지수 = 총 선물한 개수 - 총 선물받은 개수

 

import java.util.HashMap;
import java.util.Map;
class Solution {
    public int solution(String[] friends, String[] gifts) {
        int[][] arr = new int[friends.length][friends.length];
	    	int[] score = new int[friends.length];
	    	int[] gets = new int[friends.length];
	    	int answer = 0;
	    	Map<String, Integer> map = new HashMap<String, Integer>();
	    	
	    	for(int i=0; i<friends.length; i++) {
	    		map.put(friends[i], i);
	    	}
	    	
	    	for(int i=0; i<gifts.length; i++) {
	    		String[] strs = gifts[i].split(" ");
	    		
	    		arr[map.get(strs[0])][map.get(strs[1])]++;
	    		score[map.get(strs[0])]++;
	    		score[map.get(strs[1])]--;
	    		
	    	}
	    	
	    	for(int i=0; i<friends.length; i++) {
	    		for(int j=0; j<friends.length; j++) {
	    			if(i==j) continue;
	    			if((arr[i][j] > arr[j][i]) || (arr[i][j] == arr[j][i] && score[i] > score[j])) gets[i]++;
	    		}
	    	}
	    	
	    	for(int i=0; i<friends.length; i++) {
	    		answer = gets[i] > answer ? gets[i] : answer;
	    	}
	    	
	        
	        return answer;
    }
}

 

'알고리즘' 카테고리의 다른 글

[SWEA/JAVA] 1230 암호문3  (0) 2024.11.12
[SWEA/JAVA] 2001 파리퇴치  (0) 2024.11.11
[백준/JAVA] 1966 프린터큐  (0) 2024.11.10
[백준/JAVA] 9498 시험 성적  (2) 2024.11.09
[프로그래머스/JAVA]이웃한 칸  (0) 2024.11.08