반응형
풀이
- 해당 문제 풀이는 크게 복잡한 건 없었지만
- 순조롭게 해결하기 위해 어떻게 할 지 고민을 했고,
- 그에 따른 결과는 친구들의 접근을 위해 map으로 넘버링하기
- 그리고 2차원 배열로 각 인물 별로
- 받은 선물의 개수를 체크하고, 준 선물을 체크하기
- 그리고 동시에 선물 지수를 체크하기 위해 별도로 코드 넣기
- 마지막으로 2중 for 문으로 준 선물이 큰지 혹은,
- 준 선물이 같다면 선물 지수가 클 경우면 result에 추가하기.
- 이후 배열에서 가장 큰 값을 출력하여 해결.
import java.util.*;
class Solution {
public int solution(String[] friends, String[] gifts) {
StringTokenizer st;
int ln = friends.length;
// map으로 멤버 넘버링
Map<String,Integer> dic = new HashMap<>();
int idx = 0;
for (String f: friends) {
dic.put(f,idx);
idx++;
}
// i,j 같은 크기의 2차원 배열
int[][] mtx = new int[ln][ln];
// 선물 지수
int[] ji_li = new int[ln];
// 결과
int[] result = new int[ln];
// 선물 교환
for (String gift: gifts) {
st = new StringTokenizer(gift);
String a = st.nextToken();
String b = st.nextToken();
mtx[dic.get(b)][dic.get(a)]+=1;
ji_li[dic.get(a)]+=1;
ji_li[dic.get(b)]-=1;
}
for (int i=0; i<ln; i++) {
for (int j=0; j<ln; j++) {
if (i!=j) {
if (mtx[j][i] > mtx[i][j] || (mtx[j][i] == mtx[i][j] && ji_li[i]>ji_li[j])) result[i]++;
}
}
}
return Arrays.stream(result).max().orElse(0);
}
}
'알고리즘' 카테고리의 다른 글
[백준, 자바, 16173번] 점프왕 쩰리 (Small) (0) | 2024.10.10 |
---|---|
[백준, 자바, 11403번] 경로 찾기 (0) | 2024.10.10 |
[프로그래머스, 자바, 181923번] 수열과 구간 쿼리 2 (0) | 2024.10.01 |
[프로그래머스, 자바, 181924번] 수열과 구간 쿼리 3 (0) | 2024.10.01 |
[백준, 자바, 15649번] 구간 합 구하기 4 (0) | 2024.09.06 |