PS/BOJ

백준 2644 촌수계산 / JAVA

얍연구소장 2023. 5. 15.

https://www.acmicpc.net/problem/2644

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

www.acmicpc.net

 

>풀이

/*
 * 백준 2644 촌수계산
 * #실버2
 * #DFS
 */
public class boj_2644 {

	static ArrayList<Integer>[] tree;
	static boolean[] checked;
	static int answer = -1;
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine()); // 사람 수
		tree = new ArrayList[n+1];
		checked = new boolean[n+1];
		for(int i = 1; i < n+1; i++) {
			tree[i] = new ArrayList<>();
		}
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int x = Integer.parseInt(st.nextToken()); // 계산할사람
		int y = Integer.parseInt(st.nextToken()); // 계산할사람
		int m = Integer.parseInt(br.readLine()); // 부모자식관계 수
		
		for(int i = 0; i < m; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			tree[a].add(b);
			tree[b].add(a);
		}
		
		DFS(x,y,0);
		System.out.println(answer);
	}
	
	public static void DFS(int start, int end, int chonsu) {
		if(start == end) {
			answer = chonsu;
			return;
		}
		
		checked[start] = true; // 방문한 사람은 다시방문하지않기위해
		for(int i = 0; i < tree[start].size(); i++) {
			int next = tree[start].get(i);
			if(!checked[next]) {
				DFS(next, end, chonsu+1);
			}
		}
	}
}

'PS > BOJ' 카테고리의 다른 글

백준 4963 섬의개수 / JAVA  (0) 2023.05.17
백준 6603 로또 / JAVA  (0) 2023.05.16
백준 1206 보물 / JAVA  (0) 2023.05.10
백준 1996 지뢰찾기 / JAVA  (0) 2023.05.09
백준 1817 짐 챙기는 숌 / JAVA  (0) 2023.05.07

댓글