Problem details
https://school.programmers.co.kr/learn/courses/30/lessons/258712
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Ideas
- 각자의 선물 지수를 따로 기록해둔다.
- 서로 선물을 주고 받은 내용을 2차원 맵으로 기록해둔다.
(기록을 이름으로 검색하고 싶어서 맵을 사용했지만, 약간의 스킬을 쓰면 2차원 배열로도 저장이 가능하다.)
Answer code (Java)
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String[] friends, String[] gifts) {
Map<String, Integer> answerList = new HashMap<String, Integer>();
Map<String, Integer> pointList = new HashMap<String, Integer>();
Map<String, HashMap<String, Integer> > board = new HashMap<String, HashMap<String, Integer> >();
String[] splStr;
String giver, taker;
for (String gift: gifts) {
splStr = gift.split(" ");
giver = splStr[0];
taker = splStr[1];
// 각자의 선물 지수를 따로 기록해둔다.
pointList.put(giver, pointList.getOrDefault(giver, 0) + 1);
pointList.put(taker, pointList.getOrDefault(taker, 0) - 1);
// 서로 선물을 주고 받은 내용을 2차원 맵으로 기록해둔다.
HashMap<String, Integer> mp = board.getOrDefault(giver, new HashMap<String, Integer>());
mp.put(taker, mp.getOrDefault(taker, 0) + 1);
board.put(giver, mp);
}
for (int i = 0; i < friends.length - 1; i++) {
for (int j = i + 1; j < friends.length; j++) {
HashMap<String, Integer> mp = board.getOrDefault(friends[i], new HashMap<String, Integer>());
int AToB = mp.getOrDefault(friends[j], 0);
HashMap<String, Integer> mp2 = board.getOrDefault(friends[j], new HashMap<String, Integer>());
int BToA = mp2.getOrDefault(friends[i], 0);
int aPoint = pointList.getOrDefault(friends[i], 0);
int bPoint = pointList.getOrDefault(friends[j], 0);
if (AToB > BToA) {
answerList.put(friends[i], answerList.getOrDefault(friends[i], 0) + 1);
} else if (BToA > AToB) {
answerList.put(friends[j], answerList.getOrDefault(friends[j], 0) + 1);
} else if (aPoint > bPoint) {
answerList.put(friends[i], answerList.getOrDefault(friends[i], 0) + 1);
} else if (bPoint > aPoint) {
answerList.put(friends[j], answerList.getOrDefault(friends[j], 0) + 1);
}
}
}
int answer = 0;
for (String key: answerList.keySet()) {
if (answerList.get(key) > answer) {
answer = answerList.get(key);
}
}
return answer;
}
}
'-- 기타 -- > Problem Solve' 카테고리의 다른 글
[2024 KAKAO WINTER INTERNSHIP] 도넛과 막대 그래프 (0) | 2024.04.14 |
---|---|
[Codeforces Round 939] B. Nene and the Card Game (0) | 2024.04.14 |
[Codeforces Round 939] A. Nene's Game (0) | 2024.04.14 |
[Codeforces Round 938] B. Progressive Square (0) | 2024.04.14 |
[Codeforces Round 938] A. Yogurt Sale (0) | 2024.04.14 |