-
1 번부터 가장 먼 거리의 노드의 개수 ? 배열에서 최대값의 개수 구하기CodeingTestPrac/Java Coding Test 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; } }
'CodeingTestPrac > Java Coding Test' 카테고리의 다른 글
시소 짝꿍 , DS (0) 2023.08.07 모든 섬사이의 다리를 만들고 비용 최소를 구하자 , kruskal union find (0) 2023.08.06 gcd 여러개 해야함 (0) 2023.08.05 멀쩡한 사각형 , 패턴을 찾자. gpt : GCD 한줄 처리 (0) 2023.08.05 DS : Stack "baabaa" (0) 2023.07.14