connecting the dots

[BOJ/Java] 2644 : 촌수계산 본문

algorithm/BOJ

[BOJ/Java] 2644 : 촌수계산

林 : 2021. 3. 17. 09:49

문제

 

www.acmicpc.net/problem/2644

 

2644번: 촌수계산

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

www.acmicpc.net

 

 

풀이

 

  • 부모/자식간의 관계를 나타내는 relation이라는 이차원배열을 만들어 부모/자식간이면 1을, 아니라면 0이 들어있도록 한다 
  • visit 체크도 필수

 

코드

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer st;
	static int n, m, personA, personB;
	static int[][] relation;
	static boolean[] visited;
	static int answer= -1;
	
	public static void main(String[] args) throws Exception{
		n = Integer.parseInt(in.readLine());
		st = new StringTokenizer(in.readLine());
		personA = Integer.parseInt(st.nextToken());
		personB = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(in.readLine());
		
		relation = new int[n+1][n+1];
		for (int i = 0; i < m; i++) {
			st = new StringTokenizer(in.readLine());
			int A = Integer.parseInt(st.nextToken());
			int B = Integer.parseInt(st.nextToken());
			relation[A][B] = relation[B][A] = 1;
		}
		
		BFS(personA, personB);
		System.out.println(answer);
	}
	
	private static void BFS(int personA, int personB) {
		
		Queue<Person> que = new LinkedList<>(); 
		que.offer(new Person(personA, 0));
		visited = new boolean[n+1];
		while(!que.isEmpty()) {
			Person curPerson = que.poll();
			for(int i = 1; i <=n;i++) {				
				if(relation[curPerson.num][i] == 1 && !visited[i] ) {
					if(i == personB) {
						answer = curPerson.dist + 1;
						break;
					}
					visited[i] = true;
					que.offer(new Person(i, curPerson.dist + 1));
				}
			}
		}
	}
	
	private static class Person{
		int num;
		int dist;
		Person(int num, int dist){
			this.num = num;
			this.dist = dist;
		}
	}
}

 

 

느낀점

 

  • 쉬운 문제인데도 유형이 익숙하지 않아서 조금 헤맸다

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

[BOJ/Java] 1759 : 암호 만들기  (0) 2021.03.17
[BOJ/Java] 17070 : 파이프 옮기기1  (0) 2021.03.17
[BOJ/Java] 14502 : 연구소  (0) 2021.03.16
[BOJ/Java] 16234 : 인구이동  (0) 2021.03.16
[BOJ/Java] 17140 : 이차원 배열과 연산  (0) 2021.03.16