프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
1. hashmap 을 사용하여 누가 누구에게 몇 번 선물했는지 저장.
2. 다른 hashmap 하나를 더 사용하여 선물 지수를 저장.
나의풀이 ( 코드 )
import java.util.HashMap;
class Solution {
public int solution(String[] friends, String[] gifts) {
int answer = 0;
HashMap<String, HashMap<String, Integer>> hm1 = new HashMap<>();
HashMap<String, Integer> hm2 = new HashMap<>(); // 선물 지수
for(int i=0;i<friends.length;i++){
hm1.put(friends[i], new HashMap<>());
hm2.put(friends[i], 0);
for(int j=0;j<friends.length;j++){
if(i==j){
continue;
}
hm1.get(friends[i]).put(friends[j], 0);
}
}
for(int i=0;i<gifts.length;i++){
String[] people = gifts[i].split(" ");
// 선물지수 증가
hm2.put(people[0], hm2.getOrDefault(people[0], 0) + 1);
hm2.put(people[1], hm2.getOrDefault(people[1], 0) - 1);
// A -> B 선물주면 A -> B 증가 , B -> A 감소
hm1.get(people[0]).put(people[1], hm1.get(people[0]).getOrDefault(people[1], 0) + 1);
hm1.get(people[1]).put(people[0], hm1.get(people[1]).getOrDefault(people[0], 0) - 1);
}
for (String fd : hm1.keySet()) {
int sum = 0;
for (int i = 0; i < friends.length; i++) {
if (fd.equals(friends[i])) {
continue;
}
if (hm1.get(fd).get(friends[i]) > 0) { // 선물 횟수가 더 많으면
sum++;
}
if (hm1.get(fd).get(friends[i]) == 0) { // 선물 공유횟수가 같으면
if (hm2.get(fd) > hm2.get(friends[i])) {
sum++;
}
}
}
answer = Math.max(answer, sum);
}
return answer;
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/JAVA 자바] 마법의 엘리베이터 (0) | 2024.03.04 |
|---|---|
| [프로그래머스/JAVA 자바] 메뉴 리뉴얼 (0) | 2024.02.23 |
| [프로그래머스/JAVA 자바] 소수 찾기 (0) | 2023.12.12 |
| [프로그래머스/JAVA 자바] 다리를 지나는 트럭 (1) | 2023.12.06 |
| [프로그래머스/JAVA 자바] 가장 큰 수 (0) | 2023.12.05 |