일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- PS
- DP
- 브루트포스
- 알고리즘
- 동적 계획법
- 백준
- 에라토스테네스의 체
- 다이나믹 프로그래밍
- 해커랭크
- dynamic programming
- 시뮬레이션
- 구현
- C++
- 삼성 기출
- 백트래킹
- 완전탐색
- koitp
- 맛집
- hackerrank
- BFS
- sw expert academy
- BOJ
- dfs
- 스택
- 그리디
- 소수
- 잠실
- Algorithm
- 삼성 SDS 대학생 알고리즘 특강
- SWEA
- Today
- Total
목록dfs (15)
펭로그
문제 링크 : https://boj.kr/1012 BOJ 11724 연결요소의 개수랑 매우 유사한 문제로 생각된다.인접한 배추들이 존재한다면 하나로 이어진 배추들에는 지렁이가 한마리씩만 필요하다.결국 연결요소 문제랑 동일하게 연결요소의 갯수를 세면 되는 문제다.visited를 따로 만들지 않고 dfs로 탐색이 가능한 위치면 true로 두었고 방문 불가능한 위치이거나 방문했다면 false로 두었다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950// BOJ 1012 유기농 배추#include using namespace std; vector cbg;const int dx[4] = {1, -1..
문제 링크 : https://boj.kr/10451 그림과 같이 순열 사이클을 찾는 방법은 간단하다.그냥 dfs로 돌리면 된다. dfs를 몇번 시작했는지만 체크하면 된다.다음에 방문할 노드를 저장하는 것은 인접 리스트를 만드는 방법과 동일하고 방문했다면 0으로 설정하였다. 12345678910111213141516171819202122232425262728293031323334353637383940414243// BOJ 10451 순열 사이클#include using namespace std; vector permu; void dfs(int idx){ int next = permu[idx]; if(next != 0) { permu[idx] = 0; // 방문 표시 dfs(next); }} int main..
문제 링크 : https://boj.kr/11724 문제의 컨셉은 간단하다. 주어진 그래프에서 하나로 이어져 있는 연결 요소의 개수를 찾는 문제로 위 그림에서 하나로 이어져있는 연결 요소 수는 2개가 된다. 입력의 경우는 미리 인접 리스트를 만들어 간선을 입력 받는다. 그 이후 1부터 N까지 DFS를 돌려서 DFS가 끝나는 시점에 카운트를 하나 증가시켜 주면서 다음 시작 요소로 DFS를 돌리는 식으로 반복하면 답을 구할 수 있다. 스택으로 구현한 방법이 함수를 사용하여 재귀로 돌리는 것보다 시간이 덜 걸릴 줄 알았는데 함수로 재귀 돌리는 것이 의미 없는 수치이긴 하지만 더 빨랐다. (위 - 스택, 아래 - 재귀) 스택으로 구현한 방법 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ..
문제링크 : https://boj.kr/10026 현재 위치를 기준으로 상, 하, 좌, 우의 4방향을 DFS로 탐색해서 같은 영역인지 여부를 확인한다.같은 영역이 아닐 경우 빠져나오며 단 한번이라도 같은 영역이 나오면 true를 반환한다.시간 복잡도에는 크게 영향이 없을 것 같으나 편의를 위해서 한번 탐색한 'R'은 'G'로 바꿔주도록 했다.dfs 탐색 도중 중간에서 반환하는 false의 경우는 최초 dfs 실행 후 담을 chk 변수가 아닌 이상 딱히 의미는 없다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263// BOJ 10026 적록색약#..
문제링크 : https://boj.kr/1260 가장 기본적인 DFS, BFS 문제이다.시간초과 때문에 애먹었었는데.. 백준 사이트 자체 채점 시스템은 제약조건이 너무 많은 것 같다.std::cin과 같은 것도 조심해야 하고 for each 구문도 조심해야 하는듯....편하려고 STL을 사용하면 문제 생기는 부분이 좀 있는 것 같다. 1234567891011void dfs(int num){ if(!visited[num]) sort(node[num].begin(), node[num].end()); visited[num] = true; for(int i : node[num]) { if (!visited[i]) { cout