본문 바로가기

분할정복10

[알고스팟/C,C++] QUADTREE: 쿼드 트리 뒤집기 www.algospot.com/judge/problem/read/QUADTREE algospot.com :: QUADTREE 쿼드 트리 뒤집기 문제 정보 문제 대량의 좌표 데이터를 메모리 안에 압축해 저장하기 위해 사용하는 여러 기법 중 쿼드 트리(quad tree)란 것이 있습니다. 주어진 공간을 항상 4개로 분할해 재귀적 www.algospot.com 처음에 입력값을 제대로 보지 않고 풀었는데, 들어올 수 있는 입력값이 $2^{20}\times 2^{20}$ 으로 매우 큰 수 입니다. 최초 시도는 입력값을 16 x 16 크기의 배열 형태로 변환하고, 그것을 뒤집은 뒤, 다시 압축하였습니다. 당연히 결과는 오답입니다. 쿼드 트리의 크기가 16 x 16으로 고정이 아닐뿐더러, 해당 방법으로는 시간이 초과.. 2021. 3. 27.
[백준/C,C++] 10830번: 행렬 제곱 www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net hackids.tistory.com/52 [백준/C,C++] 1629번: 곱셈 www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net A의 B제곱을 C로 나눈 나머지를 구.. hackids.tistory.com hackids.tistory.com/55.. 2021. 3. 26.
[백준/C,C++] 1629번: 곱셈 www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net A의 B제곱을 C로 나눈 나머지를 구하는 문제인데, 그 수가 매우 클 수 있어 분할 정복을 이용해서 풀어야 하는 간단한 문제입니다. 힌트를 먼저 간단히 드리자면.. $A^{B}$ 과 같은 수식이 있을 때, B가 짝수라면, $A^{B/2}\times A^{B/2}$ 으로 나타낼 수 있을 겁니다. 홀수라면, $A^{B/2}\times A^{B/2+1}$ 으로 나타낼 수 있겠죠. 문제와 달리 입력값이 작다고 예를 들어봅시다!! 만약 B가 10이라고 치면 A의 B제곱을 구할 때 일반.. 2021. 3. 25.
[백준/C,C++] 1780번: 종이의 개수 www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. www.acmicpc.net 쿼드트리 문제인데 4(2x2)개로 분할하는게 아닌, 9(3x3)개로 분할하는 문제입니다. #include #include using namespace std; const int MAX = 2187; int n; int paper[MAX][MAX]; int cnt[3]; void dv(int x, int y, int len) { if (len == 0) return; int value[3] = { 0,.. 2021. 3. 19.