알고리즘/백준[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
반응형