https://www.acmicpc.net/problem/1074
1074번: Z
한수는 2차원 배열 (항상 2^N * 2^N 크기이다)을 Z모양으로 탐색하려고 한다. 예를 들어, 2*2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, 2차원 ��
www.acmicpc.net
알고리즘은 굉장히 간단하지만, 생각없이 구현해서 그런지 약간 까다로웠다. 꼭 노트로 먼저 끄적여보고 해보는게 좋을 것 같다.
주어진 좌표를 이용해 몇 사분면(?)인지 구해주고, 다시 해당 사분면으로 들어가 같은 행동을 반복하면 된다. 재귀함수를 이용하면 편하다.
#include <cstdio>
int cnt=0;
void Func(int N, int r, int c){
if(N==0){
return ;
}
else{
int i=N, width=1;
while(i-->0){
width *= 2;
}
if(r>width/2){
cnt += width * (width/2);
r -= width/2;
}
if(c>width/2){
cnt += (width/2) * (width/2);
c -= width/2;
}
Func(N-1, r, c);
}
}
int main(void){
int N, r, c;
scanf("%d %d %d",&N,&r,&c);
Func(N, r+1, c+1);
printf("%d", cnt);
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 1188번] 음식 평론가 (Silver 1) (0) | 2020.06.03 |
---|---|
[C/C++ 백준 1629번] 곱셈 (Silver 1) (0) | 2020.06.03 |
[C/C++ 백준 2004번] 조합 0의 개수 (Silver 2) (0) | 2020.06.02 |
[C/C++ 백준 1695번] 팰린드롬 만들기 (Gold 4) (0) | 2020.05.30 |
[C/C++ 백준 1254번] 팰린드롬 만들기 (Silver 1) (0) | 2020.05.28 |