Z라면 요즘 유미의 세포들의 컨트롤 젯이 생각난다.

흠.... 이거 문제 고민을 많이했다.

왜냐 흠 그냥 길게 생각안하고 졸렸기 때문이다.

지금은 싣니 공항이다. 공항에서 노숙중인데, 새벽에 풀어보니깐 해결됐당....

재귀함수인데, 4등분을 계속해서 갯수가 1개가 될때까지 한다.

근데 이렇게 하면, 시간초과가 된다. 그래서 재귀를 넣을때, 찾으려는 값을 조건문으로 걸러준다.

그럼 시간초과 해결!!

zza 의미는 Z자 라는 뜻?ㅋㅋㅋㅋㅋ이다.

#include<stdio.h>
#include<iostream>
#include<math.h>

using namespace std;

int x, y,time=0;

void zza(int a, int b, int c, int d, int vol) {
	if (vol==1) {
		if (a == x and b == y) {
			cout << time<<endl;
		}
		time++;
	}
	else {
		if(x< (a + c) / 2 and y< (b + d) / 2) zza(a, b, (a + c) / 2, (b + d) / 2, vol / 4);
		else time += vol / 4;
		if (x < (a + c) / 2 and y >= (b + d) / 2)zza(a, (b + d) / 2, (a + c) / 2, d, vol / 4);
		else time += vol / 4;
		if (x >= (a + c) / 2 and y < (b + d) / 2)zza((a + c) / 2, b, c, (b + d) / 2, vol / 4);
		else time += vol / 4;
		if((a + c) / 2<=x and (b + d) / 2<=y)zza((a + c) / 2, (b + d) / 2, c, d, vol / 4);
		else time += vol / 4;
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int N;
	cin >> N>>x>>y;
	
	zza(0,0,pow(2, N), pow(2, N), pow(4, N));
}

+ Recent posts