문제 링크 : https://www.acmicpc.net/problem/1074
문제 설명
1 |
2 |
5 |
6 |
3 |
4 |
7 |
8 |
9 |
10 |
13 |
14 |
11 |
12 |
15 |
16 |
이렇게 배열이있으면 번호 순서대로 Z를 그리며 숫자가 입력된다 작게 Z 그다음에 크게 Z ..
알고리즘
분할 정복으로 풀었다
1. 재귀함수를 부를때 좌측상단 -> 우측 상단-> 좌측하단-> 우측하단 순서로 계속재귀호출
2. num이 2가되었을 때 r,c 를 탐색하였다.
코드
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
32
33
34
35
36
|
#include<iostream>
#include <cmath> //pow();
using namespace std;
int N, r, c;
int result = 0;
void func(int n, int y, int x) {
if (n == 2) {
for (int i = y; i < y + n; i++) {
for (int j = x; j < x + n; j++) {
if (i == r && j == c) {
cout << result;
return;
}
result++;
}
}
return;
}
else {
func(n / 2, y, x);// 좌측상단
func(n / 2, y, x + n / 2); //우측상단
func(n / 2, y + n / 2, x);//좌측하단
func(n / 2, y + n / 2, x + n / 2);//우측 하단
return;
}
}
int main() {
cin >> N >> r >> c;
func(pow(2, N), 0, 0);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'c++ > 백준' 카테고리의 다른 글
백준 13904번 : 과제 (0) | 2020.04.13 |
---|---|
백준 1629번 : 곱셈 (0) | 2020.04.13 |
백준 12100번 : 2048(easy) (0) | 2020.04.13 |
백준 1931번: 회의실 배정 (0) | 2020.04.09 |
백준 11000번: 강의실 배정 (0) | 2020.04.09 |