일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 시간복잡도
- 이분그래프
- EOF
- k-eta
- 백준
- iOS14
- 입/출력
- 입출력 패턴
- 표준 입출력
- UI한글변경
- 매크로
- Django의 편의성
- 자료구조
- 프레임워크와 라이브러리의 차이
- 장고란
- 알고리즘 공부방법
- double ended queue
- string 함수
- c++
- getline
- correlation coefficient
- 엑셀
- string 메소드
- Django Nodejs 차이점
- Django란
- 2557
- 연결요소
- vscode
- scanf
- 구조체와 클래스의 공통점 및 차이점
Archives
- Today
- Total
Storage Gonie
(4) [C++, Java] 백준 No.10451 : 순열 사이클 본문
반응형
문제
풀이
자세한 풀이 : https://ldgeao99.tistory.com/398
# C++(dfs탐색을 재귀 구현으로 푼것)
#include <iostream>
#include <cstring>
using namespace std;
int arr[1001]; // 인접 리스트
bool check[1001]; // 인접 리스트
void dfs(int node);
int main()
{
int t;
cin >> t;
while(t--){
int v;
cin >> v;
// 정보를 입력받아 원소가 1개인 인접 리스트 생성
for (int i = 1; i <= v; i++){
int a;
cin >> a;
arr[i] = a;
}
// 다음 테스트 케이스를 위한 초기화
memset(check, false, sizeof(check));
// 탐색이 진행된 횟수 카운트
int ans = 0;
for (int i = 1; i <= v; i++){
if (check[i] == false){
ans += 1;
dfs(i);
}
}
// 결과출력
cout << ans << "\n";
}
}
void dfs(int node){
check[node] = true;
//cout << node << "";
int next = arr[node];
if (check[next] == false){
dfs(next);
}
}
# C++(dfs탐색을 비재귀 구현으로 푼것)
#include <iostream>
#include <cstring>
using namespace std;
int arr[1001]; // 인접 리스트
bool check[1001]; // 인접 리스트
int main()
{
int t;
cin >> t;
while(t--){
int v;
cin >> v;
// 정보를 입력받아 원소가 1개인 인접 리스트 생성
for (int i = 1; i <= v; i++){
int a;
cin >> a;
arr[i] = a;
}
// 다음 테스트 케이스를 위한 초기화
memset(check, false, sizeof(check));
// 탐색이 진행된 횟수 카운트
int ans = 0;
for (int i = 1; i <= v; i++){
if (check[i] == false){
ans += 1;
// DFS탐색
int node = i;
while(check[node] == false){
check[node] = true;
node = arr[node];
}
}
}
// 결과출력
cout << ans << "\n";
}
}
# Java
import java.util.*;
public class Main {
public static void dfs(int[] a, boolean[] c, int x) {
if (c[x]) return;
c[x] = true;
dfs(a, c, a[x]);
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
int n = sc.nextInt();
int[] a = new int[n+1];
boolean[] c = new boolean[n+1];
for (int i=1; i<=n; i++) {
a[i] = sc.nextInt();
c[i] = false;
}
int ans = 0;
for (int i=1; i<=n; i++) {
if (c[i] == false) {
dfs(a, c, i);
ans += 1;
}
}
System.out.println(ans);
}
}
}
반응형
'알고리즘 > 백준풀이9. 그래프' 카테고리의 다른 글
(6) [C++] 백준 No.9466 : 텀 프로젝트 (0) | 2019.05.31 |
---|---|
(5) [C++, Java] 백준 No.2331 : 반복수열 (0) | 2019.05.30 |
(3) [C++, Java] 백준 No.1707 : 이분 그래프 (0) | 2019.05.29 |
(2) [C++, Java] 백준 No.11724 : 연결 요소의 개수 (0) | 2019.05.29 |
(1) [C++, Java] 백준 No.1260 : DFS와 BFS (0) | 2019.05.22 |
Comments