본문 바로가기
Python

[백준] 1074번 : Z ☆

by Leunco 2022. 1. 1.
유형 : 재귀함수

[예제]

2 3 1

[출력]

11

1. 풀이

출처 : 패스트캠퍼스 - 알고리즘 / 기술면접 완전 정복 패키지 Online

 

** 핵심 아이디어
1. Z 모양을 구성하는 4가지 방향에 대하여 차례대로 재귀적으로 호출

 

def solve(n,x,y):
    global result
    if n == 2: # 2*2인 경우
    	if x == X and y == Y: # 아래 그림에서 1번
            print(result)
            return
        result += 1
     	
        if x == X and y + 1 == Y: # 아래 그림에서 2번
            print(result)
            return
        result += 1
        
        if x + 1 == X and y == Y: # 아래 그림에서 3번
            print(result)
            return
        result += 1
        
        if x + 1 == X and y + 1 == Y: # 아래 그림에서 4번
            print(result)
            return
    	result += 1
        return
 
    solve(n/2, x,y)
    solve(n/2, x,y+n/2)
    solve(n/2, x+n/2, y)
    solve(n/2, x+n/2, y+n/2)
 
 result = 0
 N, X, Y = map(int, input().split(' '))
 solve(2**N, 0, 0)

 

▷ 재귀를 이용하는게 핵심

    ▶ 4등분을 나눠서 하면 result 계산을 블록마다 해야해서 원하는 값을 얻지 못한다고 생각했다.

    ▶ 하지만 어차피 해당 좌표를 만날 때 result를 출력하고 return하기 때문에 문제가 없다!

▷ 4등분을 하여 각각 계산해야 한다는 생각까지는 했으나, 재귀로 구현을 못했다. 다시 해보자!!

 

 

문제 출처 : https://www.acmicpc.net/problem/1074

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을

www.acmicpc.net

 

반응형

'Python' 카테고리의 다른 글

[백준] 2751번 : 수 정렬하기 2  (0) 2022.01.03
[백준] 7490번 : 0 만들기 ☆  (0) 2022.01.01
[백준] 2747번 : 피보나치 수  (0) 2022.01.01
[백준] 10989번 : 수 정렬하기 3  (0) 2022.01.01
[백준] 11650번 : 좌표 정렬하기  (0) 2021.12.31

댓글