본문 바로가기
코딩 문제 풀이/백준

[백준] 자바 문제 풀이 1976 : 골드4

by 코딩하는 랄로 2023. 10. 6.
728x90

BOJ 1976 : 여행 가자

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Vector;

public class Main {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		int[][] board = new int[n][n];

		int spot = Integer.parseInt(br.readLine());
		int[] spotlist = new int[spot];
		StringTokenizer str;
		for (int i = 0; i < n; i++) {
			str = new StringTokenizer(br.readLine(), " ");
			for (int j = 0; j < n; j++)
				board[i][j] = Integer.parseInt(str.nextToken());
		}
	
		str = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < spot; i++) {
			spotlist[i] = Integer.parseInt(str.nextToken());
		}

		Vector<Integer> v = new Vector<>();
		
		boolean travel = true;
		for (int i = 0; i < spot - 1; i++) {
			int cur = spotlist[i]-1;
			int next = spotlist[i + 1]-1;
			if (board[cur][next] == 1 || cur == next)
				continue;

			v.clear();
			for (int j = 0; j < n; j++) {
				if (board[cur][j] == 1)
					v.add(j);
			}

			if (v.size() != 0) {
				for (int j = 0; j < v.size(); j++) {
					int t = v.get(j);
					for (int k = 0; k < n; k++) {
						if (board[t][k] == 1 && !v.contains(k)) {
							v.add(k);
						}
					}
				}
			}
			
			if (!v.contains(next)) {
				travel = false;
				break;
			}
		}
		if (travel)
			System.out.println("YES");
		else
			System.out.println("NO");
	}
}
728x90