[백준1074]파이썬-Z
2022. 4. 15. 17:01ㆍ[알고리즘]백준-파이썬
https://www.acmicpc.net/problem/1074
1074번: Z
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을
www.acmicpc.net
문제
한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다.

N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다.
다음 예는 22 × 22 크기의 배열을 방문한 순서이다.

N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오.
다음은 N=3일 때의 예이다.

입력
첫째 줄에 정수 N, r, c가 주어진다.
출력
r행 c열을 몇 번째로 방문했는지 출력한다.
제한
- 1 ≤ N ≤ 15
- 0 ≤ r, c < 2N
풀이
만들어진 사각형을 계속 4등분을 한다고 생각한다면 계속Z 모양이 나온다. 이 중에서 r,c의 좌표가 제 1,2,3,4사분면중 어디에 있는지를 파악하여 정답을 구하는 방식이다. 사각형의 범위는 반복문을 통해 계속 줄어들며 r,c를 찾는 것이다.
import sys
input=sys.stdin.readline
N,r,c=map(int,input().split())
ans=0
while N!=0:
N=N-1
if r<2**N and c<2**N:
ans=ans+(2**N)*(2**N)*0
elif r<2**N and c>=2**N:
ans=ans+(2**N)*(2**N)*1
c=c-(2**N)
elif r>=2**N and c<2**N:
ans=ans+(2**N)*(2**N)*2
r=r-(2**N)
else:
ans=ans+(2**N)*(2**N)*3
c=c-(2**N)
r=r-(2**N)
print(ans)'[알고리즘]백준-파이썬' 카테고리의 다른 글
| [백준 11726]파이썬-2Xn 타일링 (0) | 2022.04.16 |
|---|---|
| [백준13301]파이썬- 타일 장식물 (0) | 2022.04.15 |
| [백준 14916]파이썬-거스름돈 (0) | 2022.04.14 |
| [백준5635]파이썬- 생일 (0) | 2022.04.14 |
| [백준1969]파이썬-DNA (0) | 2022.04.14 |