반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- docker remove
- m1 docker
- 청년 Ai Big Data 아카데미
- 트리의 지름 자바
- 가운데 글자 가져오기 python
- 빅분기실기
- 나누어 떨어지는 숫자 배열 python
- 빅데이터분석기사
- 가운데 글자 가져오기 java
- 최소 스패닝 트리 자바
- 트리의 지름 java
- 코드업 1020 자바
- 프로그래머스 나누어 떨어지는 숫자 배열 파이썬
- 청년 AI Big Data 아카데미 13기
- docker 완전 삭제
- docker 삭제
- 프로그래머스 나누어 떨어지는 숫자 배열 자바
- 가운데 글자 가져오기 파이썬
- 프로그래머스 가운데 글자 가져오기 자바
- 프로그래머스 가운데 글자 가져오기 파이썬
- codeup 1020 java
- 코드업 1020 java
- 프로그래머스 가운데 글자 가져오기 python
- 나누어 떨어지는 숫자 배열 java
- 최단 경로 알고리즘
- codeup 1020 자바
- 핸즈온 머신러닝
- 가운데 글자 가져오기 자바
- m1 docker install
- 최소 스패닝 트리
Archives
- Today
- Total
NineTwo meet you
[백준/자바] 13023 ABCDE 본문
반응형

문제
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
5 4
0 1
1 2
2 3
3 4
예제 출력 1
1
예제 입력 2
5 5
0 1
1 2
2 3
3 0
1 4
예제 출력 2
1
예제 입력 3
6 5 0 1 0 2 0 3 0 4 0 5
예제 출력 3
0
예제 입력 4
8 8
1 7
3 7
4 7
3 4
4 6
3 5
0 4
2 7
예제 출력 4
1
설명
서로 연결되어 있는 5명 이상의 친구 관계를 구하는 문제다.
dfs + HashSet을 이용해 문제를 해결했다.
dfs를 이용해 연결된 간선을 살펴본다.
이때 HashSet을 사용한 지나간 정점을 더한다.
만약 지나쳤던 정점이라면 중복 제거로 인해 한번만 표시된다.
또 생각해야 했던 것은 여러 개의 컴포넌트 일 수 있다는 점이었다.
이 점은 for문을 사용해 해결했다.
결국 HsahSet의 원소의 개수가 5개 이상인 경우
- A는 B와 친구다.
- B는 C와 친구다.
- C는 D와 친구다.
- D는 E와 친구다.
다음 조건을 만족하기 때문에 문제를 해결할 수 있다.
도움이 됐던 반례
5 4
0 1
1 2
2 3
3 0
답 : 0
코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.ArrayList; | |
import java.util.HashSet; | |
import java.util.StringTokenizer; | |
public class BOJ13023 { | |
static int result = 0; | |
static ArrayList<Integer>[] friends; | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
int n = Integer.parseInt(st.nextToken()); | |
int m = Integer.parseInt(st.nextToken()); | |
friends = new ArrayList[n]; | |
for(int i = 0; i < n; i++) { | |
friends[i] = new ArrayList<>(); | |
} | |
for(int i = 0; i < m; i++) { | |
st = new StringTokenizer(br.readLine()); | |
int v1 = Integer.parseInt(st.nextToken()); | |
int v2 = Integer.parseInt(st.nextToken()); | |
friends[v1].add(v2); | |
friends[v2].add(v1); | |
} | |
for(int i = 0; i < n; i++) { | |
if(result == 1) { | |
break; | |
} | |
HashSet<Integer> hs = new HashSet<>(); | |
dfs(i, hs); | |
} | |
System.out.println(result); | |
} | |
static void dfs(int now, HashSet<Integer> hs) { | |
if(5 <= hs.size()) { | |
result = 1; | |
return; | |
} | |
if(result == 1) { | |
return; | |
} | |
for(Integer next : friends[now]) { | |
if(hs.contains(next)) { | |
continue; | |
} | |
hs.add(next); | |
dfs(next, hs); | |
hs.remove(next); | |
} | |
} | |
} |
반응형
'프로그래밍 문제 > 백준' 카테고리의 다른 글
[백준/자바] 4963 섬의 개수 (0) | 2021.01.11 |
---|---|
[백준/자바] 11724 연결 요소의 개수 (0) | 2021.01.11 |
[백준/자바] 16168 퍼레이드 (0) | 2021.01.10 |
[백준/자바] 1199 오일러 회로 (0) | 2021.01.07 |
[백준/자바] 1516 게임 개발 (0) | 2021.01.07 |
Comments