TIL) 1074 Z

🎃 4분면으로 나누기

💡 아이디어

  • 전체 사이즈가 2의 제곱으로 증가하기 때문에 전체를 4분면으로 나눠서 한 변의 길이가 2가 될때까지 나눈다.
  • 한 변의 길이가 2가 되면 r과 c를 이용해서 숫자를 찾는다.
  • 숫자를 찾기 위해서는 가장 왼쪽 맨 위의 숫자에 주목해서 재귀를 통해 사이즈가 작아질 때마다 idx를 이용해서 시작하는 숫자를 지정해줘야한다.
N, r, c = map(int, input().split())

def divide(size, r, c):
    idx = 0
    if size == 2:
        return r * 2 + c * 1
    half = size // 2
    if r < half and c < half:
        return idx + divide(half, r, c)
    elif r < half and c >= half:
        idx += int(size * size / 4)
        return idx + divide(half, r, c-half)
    elif r >= half and c < half:
        idx += int(size * size / 4 * 2)
        return idx + divide(half, r-half, c)
    else:
        idx += int(size * size / 4 * 3 )
        return idx + divide(half, r-half, c-half)

print(divide(2**N, r, c))

좋은 웹페이지 즐겨찾기