본문 바로가기

Algorithm350

[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.
[BOJ]2110번: 공유기 설치 (c++) https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (1 ≤ xi ≤ 1,000,000,000)가 � www.acmicpc.net #include #include #include using namespace std; // 라우터를 거리가 서로 min_gap 이상으로 설치할 때의 개수 구하기 int count_routers(vector &houses, int min_gap) { int last = houses[0]; int cnt = 1; for (int i = 1; i .. 2020. 7. 8.
[BOJ]2805번: 나무 자르기 (c++) https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, www.acmicpc.net 이분 탐색 #include #include #include using namespace std; // limit높으로 자르고 남은 길이 합 구하기 long long get_cut_off_sum(vector &trees, long long limit) { long long left = 0; for (int tree : trees) { if (tree - limit > 0) { left += tree .. 2020. 7. 8.