백준1074(파이썬) - Z
resilient
·2021. 5. 27. 00:37
728x90
반응형
https://www.acmicpc.net/problem/1074
- 이 문제는 구현을 어떻게 하느냐가 중요하다.
- 나는 사분면으로 생각하였다.
- 사분면의 한 길이를 구해주고, 그 길이랑 r과 c를 비교해서 몇 사분면에 있는지를 먼저구한뒤, 속해 있는 사분면 전까지의 합을 먼저 num 값에 넣어준다.
- 그 이후에 속해 있는 사분면을 또 사분면으로 쪼개서 생각해봐야한다. 그렇게 되면 r과 c는 결국 쪼개다보면 (0,0) (1,0),(0,1),(1,1) 로 값이 한정되게 된다. 즉, 한변이 2짜리인 정사각형으로 마지막에 쪼개지게 된다.
import sys
input = sys.stdin.readline
n, r, c = map(int, input().split())
#r,c를 주어진 큰 정사각형중에서 x,y좌표로 생각한다.
num = 0
while n > 0:
# 사분면 한 변의 길이
square = (2 ** n) // 2
if n > 1:
if square > r and square <= c:
num += square ** 2
c -= square
elif square <= r and square > c:
num += (square ** 2) * 2
r -= square
elif square <= r and square <= c:
num += (square ** 2) * 3
r -= square
c -= square
#3개로 쪼갠이유는 0,0일때는 이미 square에서 처리한값을 num에 더해주었기때문이다.
elif n == 1:
if r == 0 and c == 1:
num += 1
elif r == 1 and c == 0:
num += 2
elif r == 1 and c == 1:
num += 3
n -= 1
print(num)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
백준3079(파이썬) - 입국심사 (0) | 2021.05.29 |
---|---|
[백준]18111(파이썬) - 마인크래프트 (2) | 2021.05.27 |
백준14499(파이썬) - 주사위 굴리기 (0) | 2021.05.25 |
백분1874(파이썬) - 스택 수열 (0) | 2021.05.24 |
백준1926(파이썬) - 그림 (0) | 2021.05.24 |