[JAVA] 백준 1240번 - 노드사이의 거리
안녕하세용 오랜만에 방학맞이로 다시 백준 스터디 시작하네요
1240번: 노드사이의 거리 (acmicpc.net)
1240번: 노드사이의 거리
첫째 줄에 노드의 개수 $N$과 거리를 알고 싶은 노드 쌍의 개수 $M$이 입력되고 다음 $N-1$개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 $M$개의 노드 쌍
www.acmicpc.net
package baekjoon;
import java.util.*;
public class b1240 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n, m, row, col, cost, res, start, end;
n = sc.nextInt();
m = sc.nextInt();
List<Integer> tree = new ArrayList<>();
int arr[][] = new int[n][n];
Arrays.fill(arr, 0);
for(int i = 0 ; i < n ; i++)
{
row = sc.nextInt();
col = sc.nextInt();
cost = sc.nextInt();
arr[row][col] = cost;
arr[col][row] = cost;
tree.add(row);
tree.add(col);
}
Set<Integer> Tree = new HashSet<Integer>(tree);
List<Integer> newTree = new ArrayList<Integer>(Tree);
for(int i = 0 ; i < m ; i++)
{
start = sc.nextInt();
end = sc.nextInt();
res = 999999;
for(int j : newTree)
{
for(int k = 0 ; k < )
}
}
}
}
아무 생각없이 이런 식으로 접근하고 있었는데
삼중 포문 쓰다가 이건 아닐 거 같다는 생각 들어서 다시 계속 써보다가 제자리걸음인 거 같아서 구글링해봤는데
구글링 하다가 든 생각이 제가 제대로 탐색을 하는 코드를 쓰고 있지 않았어서 반성했습니다
구글링하다가 배운 거
StringTokenizer
StringTokenizer 변수명 = new StiringTokenizer(문자열,구분자,true/false); //true -> 구분자도 토큰으로 넣게 됨, default는 false
[JAVA 자바] StringTokenizer 클래스로 문자열 분리하기! split 비교. (tistory.com)
[JAVA 자바] StringTokenizer 클래스로 문자열 분리하기! split 비교.
안녕하세요 양햄찌 블로그 주인장입니다. 저번시간에는 split 함수를 이용해서 문자열을 나누는 방식을 알아봤는데요. 혹시 해당 포스팅이 궁금하신 분은 아래 링크를 참고해주세요 ▼ 자바 SPLIT
jhnyang.tistory.com
배운 거 2
자바에서 큐 처음 써봐서 몰랐는데
삽입할때 add, offer(add는 큐 꽉찼을때 에러발생, offer는 값 추가 실패시 false 반환 이두개 차이점 있고 나머지는 같음)
제거할때 remove, poll(remove는 다 비워졌으면 에러, poll는 null 반환)
다 없앨때 clear
맨앞값 확인 element, peek(전자는 에러, 후자는 null)
[JAVA] Queue(큐) 사용법 (add vs offer / remove vs poll / element vs peek) :: 코딩 공부 일지 (tistory.com)
[JAVA] Queue(큐) 사용법 (add vs offer / remove vs poll / element vs peek)
🚀 자바에서 큐를 사용하면서 값 추가, 삭제, 검색 메서드가 2개씩 있어서 어떠한 차이점이 있는지 알아보기 위해 정리해봤습니다. ⭐️ Queue 선언 Queue q = new LinkedList(); Integer형 선언 ⭐️ Queue에
cocoon1787.tistory.com
package baekjoon;
import java.util.*;
import java.io.*;
public class b1240 {
static int node[][];
static int distance[][];
static boolean visited[];
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n, m, row, col, cost, start, end;
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
node = new int[n+1][n+1];
distance = new int[n+1][n+1];
for(int i = 0 ; i < n-1 ; i++)
{
st = new StringTokenizer(br.readLine());
row = Integer.parseInt(st.nextToken());
col = Integer.parseInt(st.nextToken());
cost = Integer.parseInt(st.nextToken());
distance[row][col] = cost;
distance[col][row] = cost;
node[row][col] = 1;
node[col][row] = 1;
}
for(int i = 0 ; i < m ; i++)
{
st = new StringTokenizer(br.readLine());
start = Integer.parseInt(st.nextToken());
end = Integer.parseInt(st.nextToken());
bfs(start, end, n);
}
}
public static void bfs(int start, int end, int n)
{
visited = new boolean[n+1];
visited[start] = true;
Queue<Integer> queue = new LinkedList<>();
queue.offer(start);
int res[] = new int[n+1];
while(!queue.isEmpty())
{
int cur = queue.poll();
for(int i = 1 ; i <= n ; i++)
{
if(node[cur][i] == 1 && !visited[i])
{
res[i] += distance[cur][i] + res[cur];
if(i == end)
{
System.out.println(res[i]);
return;
}
queue.offer(i);
visited[i] = true;
}
}
}
}
}
구글링 해서 이해하고 쓰다가 잘 모르겠으면 다시 읽다가 쓰는 방식으로 했는데요..
저번 객체 중간이랑 내용 겹쳐서 이해는 할만했던 거 같습니다..
[백준] 노드 사이 거리 (1240) - Java, bfs — Log sey (tistory.com)
[백준] 노드 사이 거리 (1240) - Java, bfs
https://www.acmicpc.net/problem/1240 1240번: 노드사이의 거리 N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라. www.acmicpc.net [
pangseyoung.tistory.com
이 선생님 글 열심히 봤습니다
node[row][col] 이부분 귀찮아서 복붙해놓고 col row로 수정 안 해서
막판에 오류나길래 엥??하면서 한 30분 붙잡고 있었는데 이 실수였네요..
재밌네요

