[백준/Java] 13023 - [Gold V] ABCDE

2025. 2. 9. 18:55·코딩테스트/백준
목차
  1. 성능 요약
  2. 분류
  3. 제출 일자
  4. 문제 설명
  5. 입력
  6. 출력

[Gold V] ABCDE - 13023

문제 링크

성능 요약

메모리: 21132 KB, 시간: 220 ms

분류

백트래킹, 깊이 우선 탐색, 그래프 이론, 그래프 탐색

제출 일자

2025년 2월 9일 18:49:30

문제 설명

BOJ 알고리즘 캠프에는 총 N명이 참가하고 있다. 사람들은 0번부터 N-1번으로 번호가 매겨져 있고, 일부 사람들은 친구이다.

오늘은 다음과 같은 친구 관계를 가진 사람 A, B, C, D, E가 존재하는지 구해보려고 한다.

  • A는 B와 친구다.
  • B는 C와 친구다.
  • C는 D와 친구다.
  • D는 E와 친구다.

위와 같은 친구 관계가 존재하는지 안하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 사람의 수 N (5 ≤ N ≤ 2000)과 친구 관계의 수 M (1 ≤ M ≤ 2000)이 주어진다.

둘째 줄부터 M개의 줄에는 정수 a와 b가 주어지며, a와 b가 친구라는 뜻이다. (0 ≤ a, b ≤ N-1, a ≠ b) 같은 친구 관계가 두 번 이상 주어지는 경우는 없다.

출력

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


  1. 인접리스트를 통해 친구 정보를 저장한다.
  2. 백트래킹을 통해 연결된 모든 친구의 수를 탐색한다
    1. 임의의 친구 a,b,c,d,e가 모두 연결되어 있기 위해서 필요한 depth == 4
    2. 이미 찾았다면 dfs를 바로 return (가지치기)
import java.util.*;
import java.io.*;

class Main {
    static int N,M;
    static int answer = 0;
    static List<Integer>[] adjList;
    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());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        adjList = new List[N];
        visited = new boolean[N];

        for(int i=0; i<N; i++){
            adjList[i] = new ArrayList<>();
        }

        for(int i=0; i<M; i++){
            st = new StringTokenizer(br.readLine());
            int from = Integer.parseInt(st.nextToken());
            int to = Integer.parseInt(st.nextToken());

            adjList[from].add(to);
            adjList[to].add(from);
        }

        for(int i=0; i<N; i++){
            visited[i] = true;
            dfs(i, 0);
            visited[i] = false;
        }

        System.out.println(answer);
        br.close();
    }

    static void dfs(int n, int depth){
        if(depth == 4){
            answer = 1;
            return;
        }

        if(answer != 0){
            return;
        }

        for(int friend : adjList[n]){
            if(visited[friend])
                continue;
            visited[friend] = true;
            dfs(friend, depth+1);
            visited[friend] = false;
        }
    }
}

'코딩테스트 > 백준' 카테고리의 다른 글

[백준/Java] 1620 - [Silver IV] 나는야 포켓몬 마스터 이다솜  (0) 2025.02.20
[백준/Java] 11660 - [Silver I] 구간 합 구하기 5  (0) 2025.02.14
[백준/Java] 14719 - [Gold V] 빗물  (0) 2025.02.09
[백준/Java] 9012 - [Silver IV] 구간 합 구하기 5  (0) 2025.02.07
[백준/Java] 2667 - [Silver I] 단지번호붙이기  (0) 2025.01.19
  1. 성능 요약
  2. 분류
  3. 제출 일자
  4. 문제 설명
  5. 입력
  6. 출력
'코딩테스트/백준' 카테고리의 다른 글
  • [백준/Java] 1620 - [Silver IV] 나는야 포켓몬 마스터 이다솜
  • [백준/Java] 11660 - [Silver I] 구간 합 구하기 5
  • [백준/Java] 14719 - [Gold V] 빗물
  • [백준/Java] 9012 - [Silver IV] 구간 합 구하기 5
mint723dev
mint723dev
mint723dev 님의 블로그 입니다.
  • mint723dev
    mint723dev 님의 블로그
    mint723dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (89)
      • Computer Science (16)
        • Computer Architecture (0)
        • Data Structure (2)
        • Database (4)
        • Network (4)
        • Operating System (6)
        • Software Engineering (0)
      • Java (6)
      • 자료 구조 (0)
      • 코딩테스트 (63)
        • LeetCode (1)
        • 프로그래머스 (29)
        • 백준 (33)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    deque
    BFS
    오블완
    티스토리챌린지
    탐욕법
    DFS
    DP
    JVM
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
mint723dev
[백준/Java] 13023 - [Gold V] ABCDE

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.