-
[프로그래머스] 가장 많이 받은 선물 자바코딩테스트 2025. 3. 27. 15:52반응형
https://school.programmers.co.kr/learn/courses/30/lessons/258712
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이번달의 선물을 주고 받은 기록을 바탕으로 다음 달에 가장 많이 받을 선물의 수를 구하는 문제
파라미터: String [] friends ( 친구들의 이름을 담은 1차원 문자열 배열 ), String [] gifts ( 이번 달까지 친구들이 주고받은 선물 기록) 을 사용해 다음달에 가장 많은 선물을 받는 친구가 받을 선물의 수를 return 하도록 solution 함수를 완성해 주세요.
규칙 :
- 두 사람이 선물을 주고받은 기록이 있다면, 이번 달까지 두 사람 사이에 더 많은 선물을 준 사람이 다음 달에 선물을 하나 받습니다.
예를 들어 A가 B에게 선물을 5번 줬고, B가 A에게 선물을 3번 줬다면 다음 달엔 A가 B에게 선물을 하나 받습니다.
- 두 사람이 선물을 주고받은 기록이 하나도 없거나 주고받은 수가 같다면, 선물 지수가 더 큰 사람이 선물 지수가 더 작은 사람에게 선물을 하나 받습니다.
선물 지수는 이번 달까지 자신이 친구들에게 준 선물의 수에서 받은 선물의 수를 뺀 값입니다.
예를 들어 A가 친구들에게 준 선물이 3개고 받은 선물이 10개라면 A의 선물 지수는 -7입니다. B가 친구들에게 준 선물이 3개고 받은 선물이 2개라면 B의 선물 지수는 1입니다. 만약 A와 B가 선물을 주고받은 적이 없거나 정확히 같은 수로 선물을 주고받았다면, 다음 달엔 B가 A에게 선물을 하나 받습니다.
만약 두 사람의 선물 지수도 같다면 다음 달에 선물을 주고받지 않습니다.
Map<String, Integer> 으로 친구목록과 번호를 정리하기 위해 선언하고
선물지수정보를 담기 위한 int[] indexes 와 선물교환정보를 요약하기 위한 int[][] giftInfo를 사용.
규칙에 따르면 본인은 계산에서 제외하고, 서로간 비교에서 주고 받은 갯수가 많은 쪽에 받을 선물 갯수를 +1.
그리고 서로 주고 받지 않았거나 주고 받은 갯수가 같은 경우, 선물지수가 큰 쪽의 선물 갯수를 +1 하였다.
import java.util.HashMap; import java.util.Map; class Solution { public int solution(String[] friends, String[] gifts) { Map<String, Integer> m = new HashMap<>(); for(int i = 0; i < friends.length; i++){ m.put(friends[i], i); } int[] indexes = new int[friends.length]; int[][] giftInfo = new int[friends.length][friends.length]; for(String gift : gifts){ String[] giveTake = gift.split(" "); indexes[m.get(giveTake[0])] ++; indexes[m.get(giveTake[1])] --; giftInfo[m.get(giveTake[0])][m.get(giveTake[1])] ++; } int answer = 0; for(int i = 0; i < friends.length; i ++){ int cnt = 0; for(int j = 0; j < friends.length; j++){ if( i == j ) continue; else if(giftInfo[i][j] > giftInfo[j][i]) cnt ++; else if(giftInfo[i][j] == giftInfo[j][i] && indexes[i] > indexes[j]) cnt ++; } answer = Math.max(cnt, answer); } return answer; } }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 자바 (0) 2025.03.28 [프로그래머스]붕대감기 자바 (0) 2025.03.27 [프로그래머스] [PCCE 기출문제] 10번 / 공원 (0) 2025.03.26 [프로그래머스] [PCCE 기출문제] 9번 / 지폐 접기 자바 (0) 2025.03.25 [프로그래머스] 동영상재생기 자바 (0) 2025.03.25