Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- 코딩테스트
- 99클럽
- 구현
- python
- 깊이우선탐색
- 프로그래머스
- 문자열
- 자바
- programmers
- 너비우선탐색
- SSAFY수료식
- 개발자스터디
- DP
- 99일지
- BOJ
- BFS
- 싸피
- 삼성청년SW아카데미
- java
- 백트래킹
- til
- 위상정렬
- 백준
- ssafy
- dfs
- 항해
- 브루트포스
- 다이나믹프로그래밍
- 알고리즘
Archives
- Today
- Total
EunJng
[PRO] 가장 먼 노드 | Java | Python 본문
문제
프로그래머스 코딩테스트 연습 > 그래프 > 가장 먼 노드 | Lv.3
https://school.programmers.co.kr/learn/courses/30/lessons/49189?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
자바와 파이썬으로 풀이하였습니다.
1. 자바 풀이
import java.util.*;
class Solution {
public int solution(int n, int[][] edge) {
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for(int i = 0; i < n+1; i ++) {
graph.add(new ArrayList<>());
}
// 인덱스에 해당하는 노드와 연결된 노드들 추가(양방향)
for(int i = 0; i < edge.length; i++) {
graph.get(edge[i][0]).add(edge[i][1]);
graph.get(edge[i][1]).add(edge[i][0]);
}
int[] visited = new int[n+1];
Queue<Integer> q = new LinkedList<>();
q.add(1);
visited[1] = 1;
while(!q.isEmpty()) {
int now = q.poll();
for(int i = 0; i < graph.get(now).size(); i++) {
int next = graph.get(now).get(i);
// now와 연결된 노드들 순회하면서
// next에 방문한 적 없으면 이전까지의 거리 + 1해서 저장 후 q에 추가
if(visited[next] == 0) {
visited[next] = visited[now] + 1;
q.add(next);
}
}
}
int answer = 0;
int max = 1;
for(int i = 1; i <= n; i++) {
if(visited[i] > max) {
max = visited[i];
answer = 1;
} else if (visited[i] == max) {
answer++;
}
}
return answer;
}
}
- bfs를 사용하였다.
- graph는 인덱스에 해당하는 노드 번호에서 갈 수 있는 노드들을 저장하고, visited는 해당 인덱스의 방문 여부 및 시작 노드(1)부터로의 거리를 저장하였다.
- 연결된 노드의 개수를 알 수 없어 ArrayList를 사용하였는데, 아직 사용에 헷갈리는 부분이 있어 get 사용은 구글링을 통해 도움을 얻었다.
2. 파이썬 풀이
from collections import deque
def solution(n, edge):
graph = [[] for _ in range(n+1)]
visited = [0] * (n+1)
for a, b in edge:
graph[a].append(b)
graph[b].append(a)
q = deque()
q.append(1)
visited[1] = 1
while q:
now = q.popleft()
for next in graph[now]:
if not visited[next]:
q.append(next)
visited[next] = visited[now] + 1
answer = visited.count(max(visited))
return answer
'PROBLEM > PROGRAMMERS' 카테고리의 다른 글
[PRO] SQL 고득점 Kit - SELECT 2 (0) | 2024.03.03 |
---|---|
[PRO] SQL 고득점 Kit - SELECT 1 (0) | 2024.03.02 |
[PRO] 큰 수 만들기 | Java (0) | 2023.06.21 |
[PRO] 둘만의 암호 | Java (0) | 2023.06.19 |
[PRO] 택배 배달과 수거하기 | Python | Java (0) | 2023.06.18 |