본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 2630번 색종이 만들기

by 현장 2022. 1. 17.

-코드

def sol(x, y, num):
    color = arr[x][y]
    for i in range(x, x + num):
        for j in range(y, y + num):
            if color != arr[i][j]:
                sol(x, y, num // 2)
                sol(x, y + num // 2, num // 2)
                sol(x + num // 2, y, num // 2)
                sol(x + num // 2, y + num // 2, num // 2)
                return
    if color == 0:
        result[0] += 1
    else:
        result[1] += 1


n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
result = [0, 0]
sol(0, 0, n)
print(result[0])
print(result[1])

처음에 문제는 이해했으나 코드가 머릿속에 그려지지 않아서 분류를 보고 재귀인 것을 보고 for문을 2개를 사용하여 함수를 만들었으나 재귀를 어떻게 해줘야 하는지 몰라서 못 풀었었습니다. 그래서 아래의 블로그의 해설을 보고 재귀를 하는 부분을 만들어주고 그 뒤로 0 부분과 1 부분을 어떻게 해줘야 하는지 몰라서 다시 찾아보고 이해가 되지 않아서 다시 머릿속으로 구조를 돌려봐야 했습니다. 해결은 했지만 너무 참고를 많이 했습니다. 그래서 나중에 다시 혼자서 풀어보기도 하고 비슷한 문제를 많이 풀 수 있도록 분류를 찾아서 해봐야겠습니다.

 

해설 참고: https://happylsm76.tistory.com/entry/%EB%B0%B1%EC%A4%80-2630%EB%B2%88%EC%83%89%EC%A2%85%EC%9D%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-with-Python