[첫번째 문제] 백준 / 1074 : Z

‍sw·2021년 9월 23일
0

1일 1문제

목록 보기
1/9

1074번 Z는 문제의 모양부터 분할 정복을 사용하라는 힌트를 주는 것이었는데 , 수식적으로 접근하려다 오히려 시간을 낭비했다.

항상 4사분면 형태로 필드가 증식되는것을 생각한다면 게임판을 줄여가며 해당하는 값을 더해주기만 해도 쉽게 풀린다.

# include <iostream>
# include <math.h>
using namespace std;



int main() {
	int N , r , c;
	cin >> N >> r >> c;
	int  bound = 0;
	int cnt = 0;
	while (N >= 1) {
		if (r > pow(2, N - 1) - 1 && c > pow(2, N - 1) - 1) 
		{
			bound = 3;
			r -= pow(2, N - 1) ;
			c -= pow(2, N - 1) ;
		}
		else if (r > pow(2, N - 1) - 1 && c <= pow(2, N - 1) - 1)
		{
			bound = 2;
			r -= pow(2, N - 1) ;
		}
		else if (r <= pow(2, N - 1) - 1 && c > pow(2, N - 1) - 1)
		{
			bound = 1;
			c -= pow(2, N - 1) ;
		}
		else if (r <= pow(2, N - 1) - 1 && c <= pow(2, N - 1) - 1) bound = 0;
		int q = bound * pow(4, N - 1);
		cnt += bound * pow(4, N - 1);
		N -= 1;
	}
    	cout << cnt;
	return 0;
}

또한 유의해야 할점은, 이런 방식으로 풀게되면 꼭 경계를 다시 설정해야 한다는 것이다. 문제의 크기가 바뀌었으니 r , c도 바꿔줘야 한다.

Hits

0개의 댓글

관련 채용 정보