본문 바로가기

온라인 코딩/재귀 호출(Recursive Call)

[백준] 1074번 Z

문제

 

소스코드

#include<iostream>
int g_number;
int N = 0, g_x = 0, g_y = 0;
// r,c를 몇 번째 방문하는가?
void Function(int N, int row, int col) {
	//작은 단위까지 나눈다.
	if (N == 2) {
		// 0,0
		if (g_x == row && g_y == col) {
			std::cout << g_number << "\n";
			return;
		}
		++g_number;
		//0,1
		if (g_x == row && g_y == col + 1) {
			std::cout << g_number << "\n";
			return;
		}
		++g_number;
		// 1,0
		if (g_x == row + 1 && g_y == col) {
			std::cout << g_number << "\n";
			return;
		}
		++g_number;
		//1,1
		if (g_x == row + 1 && g_y == col + 1) {
			std::cout << g_number << "\n";
			return;
		}
		++g_number;
		return;
	}
	Function(N / 2, row, col); //왼쪽 
	Function(N / 2, row, col + N / 2); //오른쪽
	Function(N / 2, row + N / 2, col);//왼쪽아래
	Function(N / 2, row + N / 2, col + N / 2);//오른쪽 아래
}

int main() {
	std::cin >> N >> g_x >> g_y;
	Function(1<<N, 0, 0);
}

 

 

후기

재귀 함수에 얼마나 취약한지 알 수 있었다.. 패턴이 보이는 문제였기 때문에 쉽게 풀 수 있을 거라고 생각했지만 생각보다 시간이 걸렸으며 결국에는 다른 사람의 풀이를 참고해서 풀었기에 100% 혼자 푼 게 아니다. 알다가도 모르겠는 게 재귀 함수 문제인 거 같다. 

 

 

 

 

출처 및 레퍼런스

문제 링크:https://www.acmicpc.net/problem/1074

 

 

 

 

2020.07.07

폰트 색상 및 폰트 변경