티스토리 뷰

알고리즘/백준

[백준] 1074. Z

빙빙 2021. 3. 7. 22:01

코드 알고리즘

1.계속해서 4분할을 한다

2.길이가 2가 되면 더이상 분할할 수 없기 때문에 여기서 작은 사각형에서 왼쪽위->오른쪽위->왼쪽아래->오른쪽아래 (Z모양 순서)순서로 cnt +=1 해주며 찾아준다.


cnt = 0
def func(a,x,y):
    global cnt
    if a == 2:
        if x == r and y == c: #왼쪽 위
            print(cnt)
            return
        cnt += 1
        if x == r and y + 1 == c: #오른쪽 위
            print(cnt)
            return
        cnt += 1
        if x+1 == r and y == c: # 왼쪽아래
            print(cnt)
            return
        cnt += 1
        if x+1 == r and y+1 == c: #오른쪽 아래
            print(cnt)
            return
        cnt += 1
    else:
        func(a//2, x, y)# 첫번째 사각형(왼쪽 위)
        func(a//2,x, y + a//2) #두번째 (오른쪽 위)
        func(a // 2, x + a //2, y )  # 세번째(왼쪽 아래)
        func(a // 2, x + a // 2, y + a // 2)  # 네번째 (오른쪽 아래)




N, r, c = map(int,input().split())
num = 2**N #num은 한변의 길이
func(num,0,0)
#좌표 r,c에 있는 cnt수를 출력해야한다.

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 11399. ATM  (0) 2021.03.27
[백준] 17070. 파이프 옮기기 1  (0) 2021.03.16
[백준] 17478. 재귀함수가 뭔가요?  (0) 2021.03.04
[백준] 6603. 로또  (0) 2021.03.04
[SWEA] 4865. 글자수  (0) 2021.02.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함