CodeingTestPrac/Java Coding Test

1 번부터 가장 먼 거리의 노드의 개수 ? 배열에서 최대값의 개수 구하기

sung.hyun.1204 2023. 8. 6. 13:26

https://school.programmers.co.kr/learn/courses/30/lessons/49189

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

BFS 로 풀면 된다.

 

가장 먼 노드들의 전체 개수를 조회를 하는 방법이 무엇이 있을까를 고민을 했고 단순하게 리스트를 이용하는게 좋아 보였다.

 

distance 배열이 주어졌을때 최대값의 개수를 어떻게 구할까 ?

 

Arrays.stream 을 이용하자.

 

 int maxDistance = Arrays.stream(distance).max().getAsInt();
 
long count = Arrays.stream(distance).filter(d -> d == maxDistance).count();

 

 

class Solution {
    public int solution(int n, int[][] edge) {

        boolean[] visited = new boolean[n+1];

        List<List<Integer>> way = new ArrayList<>();
        for(int i =0 ; i < n+1 ; i++) {
            way.add(new ArrayList<>());
        }

        for(int[] item : edge) {
            int left = item[0];
            int right = item[1];
            way.get(left).add(right);
            way.get(right).add(left);
        }
//        System.out.println(way);

        int[] distance = new int[n+1];  // 1번 노드로부터의 거리를 저장할 배열

        // bfs
        Queue<Integer> q = new LinkedList<>();
        q.offer(1);
        visited[1] = true;
        while (!q.isEmpty()){
            int cuurNode = q.poll();
            for(int nextNode : way.get(cuurNode)) {
                if(!visited[nextNode]){
                    visited[nextNode] = true;
                    q.offer(nextNode);
                    distance[nextNode] = distance[cuurNode] + 1;
                }
            }
        }

        // return number of node , which max far from number 1 :
        int maxDistance = Arrays.stream(distance).max().getAsInt();
        long count = Arrays.stream(distance).filter(d -> d == maxDistance).count();

        return (int) count;
    }

    
}