본문 바로가기

Algorithm/BOJ211

[BOJ]1981번: 배열에서 이동 (c++) https://www.acmicpc.net/problem/1981 1981번: 배열에서 이동 문제 n×n짜리의 배열이 하나 있다. 이 배열의 (1, 1)에서 (n, n)까지 이동하려고 한다. 이동할 때는 상, 하, 좌, 우의 네 인접한 칸으로만 이동할 수 있다. 이와 같이 이동하다 보면, 배열에서 몇 개의 www.acmicpc.net 이분탐색 + bfs #include #include #include #include using namespace std; struct pos { int x, y; }; const int MAX = 200; int N; int dr_x[] = { 0, 1, 0, -1 }; int dr_y[] = { 1, 0, -1, 0 }; int min_val = MAX; int max_v.. 2020. 7. 16.
[BOJ]1939번: 중량제한 (c++) https://www.acmicpc.net/problem/1939 1939번: 중량제한 첫째 줄에 N, M(1≤M≤100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1≤A, B≤N), C(1≤C≤1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 C인 다리 www.acmicpc.net 이분탐색 + dfs #include #include #include #include using namespace std; bool dfs(vector& graph, vector& visit, int from, int dest, int weight) { // 도착하면 true반환 if (from == dest) { return true; } // 현재.. 2020. 7. 15.
[BOJ]11729번: 하노이 탑 이동 순서 (c++) https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 분할 정복 #include #include using namespace std; void move_tower(int N, int from, int to, int mid) { if (N == 0) { return; } // 1 ~ N -1 탑 이동 : from -> mid (to 경유) move_tower(N - 1, from, mid, to); // 마지막 원판 : from -> to.. 2020. 7. 9.
[BOJ]1780번: 종이의 개수 (c++) https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. www.acmicpc.net 분할 정복 #include #include using namespace std; vector nums; struct pos { int x, y; }; // strt부터 가로세로 len의 영역의 숫자가 모두 같은지 확인 bool same_num_area(vector &paper, pos &strt, int len) { int num = paper[strt.x][strt.y]; for (i.. 2020. 7. 8.