PS/BOJ

[백준 BOJ] 1074 Z

Jubil 2019. 8. 11. 01:31
반응형

링크

https://www.acmicpc.net/problem/1074

 

풀이

Z가 많이 그려져 있습니다.

 

이렇게 $2^{n}$를 기준으로 4등분 해서 (r,c)가 어디 있는지 알아냅니다.

분할 정복 알고리즘으로 크게 4등분으로 쪼개고 더 잘게 잘게 쪼개가면서 답을 찾는 알고리즘입니다.

 

 

2 3 1이라는 입력 예제로 테스트 해보겠습니다.

 

n이 2일 때, $2^{n}$는 2가 됩니다.

r은 3이고 c는 1이기 때문에 r은 2보다 크거나 같고 c는 2보다 작은 3사분면이 해당됩니다.

ans에는 $2\times 2^{n}$을 더하고, r과 c에는 $2^{n}$인 2로 나눈 나머지를 대입합니다.

 

 

n이 1일 때, $2^{n}$는 1이 됩니다.

r은 1이고 c는 1이기 때문에 r은 1보다 크거나 같고 c는 1보다 크거나 같은 4사분면이 해당됩니다.

ans에는 $3\times 2^{n}$을 더하고, n이 1이니 종료합니다.

 

이렇게 ans는 8+3이 되어 11이라는 답을 찾을 수 있습니다.

 

 

코드

//1074_Z
#include <cstdio>
#include <math.h>
using namespace std;

int n, r, c, ans, s;

int main() {
	scanf("%d %d %d", &n, &r, &c);

	while (n) {
		int idx;
		s= pow(2, n)/2;
		if (c < s && r < s) idx = 0;		//2사분면
		else if (c >= s && r < s) idx = 1;	//1사분면
		else if (c < s&&r >= s)idx = 2;		//3사분면
		else if (c >= s && r >= s)idx = 3;	//4사분면

		c %= s;		
		r %= s;		//c와 r을 다음 사각형으로 세팅

		ans += pow(s,2) * idx;		// ans에 s^2 * idx 더해줌
		n--;
	}

	printf("%d\n", ans);

	return 0;
}

반응형

'PS > BOJ' 카테고리의 다른 글

[백준 BOJ][deque] 2164 카드2  (0) 2019.08.11
[백준 BOJ] 2312 수 복원하기  (0) 2019.08.11
[백준 BOJ] 1436 영화감독 숌  (0) 2019.08.11
[백준 BOJ] 1018 체스판 다시 칠하기  (0) 2019.08.10
[백준 BOJ] 11365 !밀비 급일  (0) 2019.08.10