[C++]BOJ 2583 - 영역 구하기
[C++]BOJ 2468 - 안전 영역

[C++]BOJ 2468 - 안전 영역

범위가 그리 크지 않기 때문에 내리는 비의 양을 완전탐색하고 그때마다 높이를 기준으로 dfs나 bfs를 돌리면 된다.
이 문제는 dfs로 풀어봤다.

Read More
[C++]BOJ 6603 - 로또

[C++]BOJ 6603 - 로또

주어진 집합에서 수 6개를 고르는 경우의 수를 완전탐색하는 문제다.
사전순 출력이기 때문에 dfs로 순차 출력하면 된다.

Read More
[C++]BOJ 11403 - 경로 찾기
[C++]BOJ 11724 - 연결 요소의 개수

[C++]BOJ 11724 - 연결 요소의 개수

단순한 탐색 문제다.
모든 노드를 간선을 따라 탐색하며 방문처리를 한 후, 방문을 안한 노드가 있다면 모든 노드를 방문할 때 까지 탐색하고 총 탐색 횟수를 출력하면 된다.
dfs와 bfs모두 쓸 수 있다.

Read More
[C++]BOJ 14502 - 연구소

[C++]BOJ 14502 - 연구소

주어진 지도의 크기가 최대 8 * 8이므로 바이러스와 벽이 아무것도 없다고 가정하면 벽을 세울 수 있는 경우의 수는 64C3 대략, 40,000 가지이다.
그러므로 벽을 세우는 문제는 완전탐색으로 해결할 수 있다.
벽을 세우는 모든 방법의 수 마다 바이러스가 퍼지는 경우를 dfs로 탐색하고 안전영역이 가장 큰 경우의 수를 기억해 마지막에 전체 칸의 갯수 - 퍼진 바이러스의 갯수 - 처음에 있던 벽의 갯수 - 3을 출력한다.

bfs로도 풀 수 있다. 귀찮아서 안 해봤다.

Read More
[C++]BOJ 1012 - 유기농 배추

[C++]BOJ 1012 - 유기농 배추

배열을 순회하며 배추를 만나면 그 지점부터 bfs나 dfs를 돌리며 모두 0으로 초기화한다.
이 과정을 반복해 모둔 배추 영역을 찾은 후 그 영역의 갯수를 출력하면 된다.
bfs와 dfs모두 다뤄보겠다.

Read More
[C++]BOJ 1697 - 숨바꼭질

[C++]BOJ 1697 - 숨바꼭질

bfs로 n + 1, n - 1, n * 2의 경우를 계속 탐색해나가며 동생의 위치에 가장 먼저 도달한 경우의 횟수를 출력하면 된다.
트리를 그려보면 알겠지만 중복되는 경우가 자주 등장해서 메모이제이션을 사용하지 않으면 메모리 초과가 뜬다.
방문을 저장할 배열 하나를 만들어준다.

Read More
[C++]BOJ 7576 - 토마토

[C++]BOJ 7576 - 토마토

익은 토마토의 위치를 전부 큐에 넣고 bfs를 돌린다.
익혀진 토마토의 배열 위치에 익혀진 날짜의 값을 저장한다.

Read More
[C++]BOJ 2667 - 단지번호붙이기

[C++]BOJ 2667 - 단지번호붙이기

지도를 배열에 저장하고 칸별로 분기를 돌며 집이 있는 칸을 만나면 인접한 집들을 탐색한다.
위 과정을 반복해 단지를 나누고 집의 수를 벡터에 저장한 후 정렬해 출력한다.
bfs dfs 두 방법 모두 다뤄보겠다.

Read More