보글보글 개발일지
Published 2023. 3. 17. 16:14
[백준/13023][Java] ABCDE 알고리즘
반응형

문제

https://acmicpc.net/problem/13023

 

13023번: ABCDE

문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다.

www.acmicpc.net

 

알고리즘

DFS

코드

package algo0317;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class B13023_ABCDE {
	static int n, m;
	static StringBuilder sb = new StringBuilder();
	static ArrayList<Integer>[] arr;
	static boolean[] vis;
	static int check;

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		arr = new ArrayList[n];
		vis = new boolean[n];
		for (int i = 0; i < n; i++) {
			arr[i] = new ArrayList<Integer>();
		}
		// 친구 관계 입력받기: m개
		for (int i = 0; i < m; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			arr[a].add(b);
			arr[b].add(a);
		}
		for (int i = 0; i < n; i++) {
			dfs(i, 1);// depth = 1 부터 시작, i=0부터 순차 탐색
			if (check == 1)
				break;
		}
		System.out.println(check);

	}

	private static void dfs(int now, int depth) {
		if (depth == 5) {
			check = 1;
			return;
		}
		vis[now] = true;
		for (int i : arr[now]) { // 각 어레이리스트 내부를 탐방함
			// 현재 노드의 연결 노드 중 방문하지 않은 노드로 DFS 실행
			if (!vis[i]) {
				// 만약 방문 안했으면 거기서 또 DFS시작
				dfs(i, depth + 1);
			}
		}
		vis[now] = false;
	}

}
반응형

'알고리즘' 카테고리의 다른 글

[백준/2178][Java] 미로탐색  (0) 2023.03.20
[백준/2606][Java] 바이러스  (0) 2023.03.20
[백준/1920][Java] 수찾기  (0) 2023.03.17
[백준/1931][Java] 회의실 배정  (0) 2023.03.17
[백준/11724][Java] 연결요소의 개수  (0) 2023.03.16
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!