사용자 도구

사이트 도구


ps:problems:boj:1992

쿼드트리

ps
링크acmicpc.net/…
출처BOJ
문제 번호1992
문제명쿼드트리
레벨실버 1
분류

기초

시간복잡도O(n^2)
인풋사이즈n<=64
사용한 언어Python
제출기록29200KB / 76ms
최고기록52ms
해결날짜2021/07/27

풀이

  • 그냥 시키는대로 구현하면 되는 문제.
  • 쿼드트리로 압축한 데이터의 크기만을 구하는 문제였던 색종이 만들기에서는 반복으로 구현했지만, 여기에서는 재귀를 써서 구현했다.
  • 시간복잡도는 N*N + (N/2 * N/2) + (N/4 * N/4) + … + (1 * 1) = (N^2)/3 = O(N^2)

코드

"""Solution code for "BOJ 1992. 쿼드트리".

- Problem link: https://www.acmicpc.net/problem/1992
- Solution link: http://www.teferi.net/ps/problems/boj/1992
"""


def solve(data, r, c, size):
    if size == 1:
        return data[r][c]
    else:
        size //= 2
        quad = ''.join([solve(data, r, c, size),
                        solve(data, r, c + size, size),
                        solve(data, r + size, c, size),
                        solve(data, r + size, c + size, size)])
        if quad == '1111':
            return '1'
        elif quad == '0000':
            return '0'
        else:
            return f'({quad})'


def main():
    N = int(input())
    data = [input() for _ in range(N)]

    print(solve(data, 0, 0, N))


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
B E K C Y
 
ps/problems/boj/1992.txt · 마지막으로 수정됨: 2021/07/27 15:30 저자 teferi