import java.util.*;
class Solution {
class Node{
int node;
int dist;
public Node(int n, int d){
node = n;
dist = d;
}
}
public int solution(int n, int[][] edge) {
int answer = 0;
List<List<Integer>> graph = new ArrayList<>();
for(int i = 0; i < n+1; i++){
graph.add(new ArrayList<>());
}
for(var k : edge){
graph.get(k[0]).add(k[1]);
graph.get(k[1]).add(k[0]);
}
Queue<Node> q = new LinkedList<>();
boolean[] visited= new boolean[n+1];
q.offer(new Node(1, 0));
visited[1] = true;
List<Integer> list = new ArrayList<>();
while(!q.isEmpty()){
Node cur = q.poll();
for(int i = 0; i < graph.get(cur.node).size(); i++){
int curNode = graph.get(cur.node).get(i);
if(visited[curNode]) continue;
visited[curNode] = true;
q.offer(new Node(curNode, cur.dist+1));
list.add(cur.dist+1);
}
}
Collections.sort(list, Collections.reverseOrder());
int max = list.get(0);
for(var k : list){
if(max != k) break;
answer += 1;
}
return answer;
}
}
package 프로그래머스.자바.택배배달과수거하기;
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = -1;
// 1. 투 포인터 각각 최대점부터 시작
int d, p;
d = p = n-1;
// 2. 최대 거리를 저장할 변수
int dist = 0;
long result = 0;
// 3. d, p가 모두 -1이 되면 멈춤
while(d >= 0 || p >= 0){
dist = Integer.MIN_VALUE;
int count = cap;
while(count > 0 && d >= 0){
if(deliveries[d] > 0) {
dist = Math.max(dist, d);
deliveries[d] -= 1;
count--;
} else d -= 1;
}
count = cap;
while(count > 0 && p >= 0){
if(pickups[p] > 0) {
dist = Math.max(dist, p);
pickups[p] -= 1;
count--;
} else p -= 1;
}
if(dist == Integer.MIN_VALUE) break;
result += (dist+1)*2;
}
answer = result;
return answer;
}
}