알고리즘/백준[baekjoon]

[baekjoon] 백준 1074번 : z (by python 파이썬)

코딩하는이씨 2022. 4. 13. 20:38
728x90
반응형

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

 

1074번: Z

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

www.acmicpc.net

 

정답 code

#z
n,r,c = map(int,input().split())

ans = 0
while n !=0 :
    n -= 1
    #1사분면
    if r< 2**n and c < 2**n:
        ans += (2**n) *(2**n) *0
    #2사분면
    elif r < 2**n and c >= 2**n:
        ans += (2**n)*(2**n)*1
        c -= (2**n)
    #3사분면
    elif r >= 2**n and c < 2**n:
        ans += (2**n)*(2**n)*2
        r -= (2**n)
    #4사분면
    else:
        ans += (2**n)*(2**n)*3
        r -=(2**n)
        c -=(2**n)

print(ans)

 

이번문제는 문제를 풀어나가는 방향을 찾는데 있어서 애를 먹었다.

 

처음 생각했던 방법은 규칙을 찾는 것이 였는데 짝수행,열과 홀수 행열의 규칙이 어느정도 보여 이걸 이용해 풀고자했다.

 

하지만 이 방법으로는 구현하는데 상당히 힘들었고 결국 아래 블로그 글에서 배우게 되었다.

 

https://ggasoon2.tistory.com/11

 

백준 1074번 - Z ( python )

백준 1074번 Z 입니다. 문제를 보자면, ( 이미지 클릭하면 크게 볼 수 있음 ) 배열의 크기는 가로 (2 ** N ) * 세로 (2 ** N) 이며, 그 배열안에는 위와 같은 z 모양의 규칙을 가지며 숫자가 들어갑니다.

ggasoon2.tistory.com

해당 블로그의 첫번째 풀이인 1,2,3,4분면을 나누어 문제를 해결 하였다.

 

solution

2에 n-1을 한 값을 제곱한 값이 중앙값에서 한칸 오른쪽임으로 

r,c 둘다 미만이면 1사분면

r만 미만이면 2사분면

c만 미만이면 3사분면

r,c둘다 이상이면 4사분면으로 해결한다.

 

 

728x90
반응형