새소식

코딩테스트/코드트리

[코드트리] 연결 관계

  • -

[문제]

https://www.codetree.ai/problems/connection?&utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

[문제 풀이]

문제 유형이 BFS로 되어 있지만 DFS를 활용한 백트래킹에 더 가까웠던 문제.

visited 배열을 만든 뒤에 방문한 곳의 위치를 1로 바꾸고 백트래킹을 한 후에 다시 0으로 바꾸기만 하면 어렵지 않게 풀 수 있다.

[회고]

main 함수쪽에서 백트래킹을 돌리는데 자기자신의 방문체크를 안했다가 테스트케이스 6번에서 틀렸었다.

자기 자신도 방문체크를 처음에 해야하는것을 잊지 말자.

[코드]

#include <iostream> #include <vector> using namespace std; bool answer = false; int n,m; int arr[2001][2001]; int visited[2001]; void backTrack(int cnt, int len){ if(len == 5){ answer = true; return; } for(int i = 0;i<n;i++){ if(arr[cnt][i] == 1){ if(visited[i] == 0){ visited[i] = 1; backTrack(i, len + 1); visited[i] = 0; } } } return; } int main() { // 여기에 코드를 작성해주세요. //1. 양방향으로 이루어져있다. //2. 백트래킹을 이용해서 간선의 길이가 5가 되는지 체크하자. //3. 2차원배열로 배열로 만들기. / vector<int> arr[2000] arr[0].push_back(1) cin>>n>>m; for(int i = 0;i<m;i++){ int a,b; cin>>a>>b; arr[a][b] = 1; arr[b][a] = 1; } for(int i = 0;i<n;i++){ visited[i] = 1; backTrack(i,1); visited[i] = 0; if(answer == true) break; } (answer == false) ? cout<<0<<endl : cout<<1<<endl; return 0; }

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.