[Python] S1_1992_์ฟผ๋“œํŠธ๋ฆฌ๐ŸŽž

Sangho Hanยท2023๋…„ 5์›” 18์ผ
post-thumbnail

https://www.acmicpc.net/problem/1992

๋ฌธ์ œ

ํ‘๋ฐฑ ์˜์ƒ์„ ์••์ถ•ํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์ฟผ๋“œ ํŠธ๋ฆฌ(Quad Tree)๋ผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํฐ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 0๊ณผ ๊ฒ€์€ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์˜์ƒ(2์ฐจ์› ๋ฐฐ์—ด)์—์„œ ๊ฐ™์€ ์ˆซ์ž์˜ ์ ๋“ค์ด ํ•œ ๊ณณ์— ๋งŽ์ด ๋ชฐ๋ ค์žˆ์œผ๋ฉด, ์ฟผ๋“œ ํŠธ๋ฆฌ์—์„œ๋Š” ์ด๋ฅผ ์••์ถ•ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์˜์ƒ์ด ๋ชจ๋‘ 0์œผ๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” "0"์ด ๋˜๊ณ , ๋ชจ๋‘ 1๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” "1"์ด ๋œ๋‹ค. ๋งŒ์•ฝ 0๊ณผ 1์ด ์„ž์—ฌ ์žˆ์œผ๋ฉด ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋‚˜ํƒ€๋‚ด์ง€๋ฅผ ๋ชปํ•˜๊ณ , ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜, ์ด๋ ‡๊ฒŒ 4๊ฐœ์˜ ์˜์ƒ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์••์ถ•ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด 4๊ฐœ์˜ ์˜์—ญ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊ด„ํ˜ธ ์•ˆ์— ๋ฌถ์–ด์„œ ํ‘œํ˜„ํ•œ๋‹ค

์œ„ ๊ทธ๋ฆผ์—์„œ ์™ผ์ชฝ์˜ ์˜์ƒ์€ ์˜ค๋ฅธ์ชฝ์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์ˆซ์ž๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ์˜์ƒ์„ ์ฟผ๋“œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์••์ถ•ํ•˜๋ฉด "(0(0011)(0(0111)01)1)"๋กœ ํ‘œํ˜„๋œ๋‹ค. N ร—N ํฌ๊ธฐ์˜ ์˜์ƒ์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ด ์˜์ƒ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์˜์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N ์ด ์ฃผ์–ด์ง„๋‹ค. N ์€ ์–ธ์ œ๋‚˜ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 1 โ‰ค N โ‰ค 64์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๊ธธ์ด N์˜ ๋ฌธ์ž์—ด์ด N๊ฐœ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ 0 ๋˜๋Š” 1์˜ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์˜์ƒ์˜ ๊ฐ ์ ๋“ค์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ถœ๋ ฅ

์˜์ƒ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์กฐ๊ฑด

์‹œ๊ฐ„ ์ œํ•œ 2์ดˆ
๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ 128MB

์ ‘๊ทผ

  1. ๋ถ„ํ•  ์ •๋ณต์ด๋ž‘ ์žฌ๊ท€ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.
  2. ๊ทผ๋ฐ ์ด์ œ ๋‚˜๋ˆŒ ๋•Œ๋งˆ๋‹ค ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์ฃผ์–ด์•ผํ•˜๋Š”๋ฐ, ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•˜์ง€??

์ฝ”๋“œ

import sys
input = sys.stdin.readline

def quadTree(x,y,n):
    global result
    first = video[x][y]  # ์ดˆ๊ธฐ ์ˆซ์ž
    
    for i in range(x,x+n):
        for j in range(y,y+n):
            # 4๋“ฑ๋ถ„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ
            if first != video[i][j]:
                result += '('
                quadTree(x, y, n//2)            # 1์‚ฌ๋ถ„๋ฉด   
                quadTree(x, y+n//2, n//2)       # 2์‚ฌ๋ถ„๋ฉด
                quadTree(x+n//2, y, n//2)       # 3์‚ฌ๋ถ„๋ฉด
                quadTree(x+n//2, y+n//2, n//2)  # 4์‚ฌ๋ถ„๋ฉด
                result += ')'
                return
    # ๋™์ผํ•œ ์ˆซ์ž๋งŒ ๋‚˜์˜จ ๊ฒฝ์šฐ        
    if first == '0':
        result += '0'
    elif first == '1':
        result += '1'
    
if __name__ == '__main__':
    n = int(input())
    video = [list(input().rstrip()) for _ in range(n)]
    result = ''
    quadTree(0,0,n)
    print(result)
  1. ๊ธฐ๋ณธ์ ์ธ ํ‹€ ์ž์ฒด๋Š” ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ์™€ ๋™์ผํ•˜๋‹ค. (https://velog.io/@hsh111366/Python-S22630%EC%83%89%EC%A2%85%EC%9D%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0)
  2. ์ฒ˜์Œ์—๋Š” ํŠœํ”Œ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜.. ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค.
  3. ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด 4๋“ฑ๋ถ„์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ()์•ˆ์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 1,2,3,4๋ถ„๋ฉด์„ ํŒŒ์•…ํ•˜๊ธฐ ์ „์— ๊ด„ํ˜ธ๋ฅผ ์—ด๊ณ , ๋๋‚˜๋ฉด ๋‹ซ์•„์ค€๋‹ค.

์ฒ˜์Œ์— ๋‚˜์˜จ ๊ทธ๋ฆผ์„ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค.
์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ 1,2,3,4์‚ฌ๋ถ„๋ฉด์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ๊ทธ ํ•˜์œ„๋กœ๋Š” 2-1์‚ฌ๋ถ„๋ฉด ... 2-4์‚ฌ๋ถ„๋ฉด ์ด๋Ÿฐ ์‹์œผ๋กœ ์นญํ•˜๊ฒ ๋‹ค.

  1. ์ „์ฒด์˜ ์ˆซ์ž๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๊ด„ํ˜ธ๋ฅผ ์—ด๊ณ  1์‚ฌ๋ถ„๋ฉด๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•œ๋‹ค.

  1. 1์‚ฌ๋ถ„๋ฉด์€ ๋ชจ๋‘ 0์ด๋ฏ€๋กœ result์— 0์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

    ํ˜„์žฌ result = (0

  1. ๋‹ค์Œ์œผ๋กœ 2์‚ฌ๋ถ„๋ฉด์„ ํƒ์ƒ‰ํ•˜๋˜ ์ค‘ 0์ด ์•„๋‹Œ 1์„ ๋ฐœ๊ฒฌํ•˜์—ฌ ๋‹ค์‹œ 4๋“ฑ๋ถ„์œผ๋กœ ์ชผ๊ฐœ๋ฉฐ ๊ด„ํ˜ธ๋ฅผ ์—ด์–ด์ค€๋‹ค.

    ํ˜„์žฌ result = (0(

  2. 2-1์‚ฌ๋ถ„๋ฉด 0, 2-2์‚ฌ๋ถ„๋ฉด 0, 2-3์‚ฌ๋ถ„๋ฉด 1, 2-4์‚ฌ๋ถ„๋ฉด 1๋กœ ์••์ถ•ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— result์— 0011์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  ๋ชจ๋“  ์‚ฌ๋ถ„๋ฉด ํƒ์ƒ‰์„ ๋งˆ์ณค๊ธฐ์— ๊ด„ํ˜ธ๋ฅผ ๋‹ซ์•„์ค€๋‹ค.

    ํ˜„์žฌ result = (0(0010)

์ด๋Ÿฐ์‹์œผ๋กœ ๋๊นŒ์ง€ ํƒ์ƒ‰์„ ํ•˜๋ฉด ์›ํ•˜๋Š” ๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค!๐Ÿ™Œ

๋А๋‚€ ์  & ๋ฐฐ์šด ์ 

  1. ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ž˜ ์“ฐ๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค์ด ๋งŽ์„ ๋“ฏ ํ•˜๋‹ค!
  2. ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋„ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
profile
์•ˆ๋…•ํ•˜์„ธ์š”. ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž, ํ•œ์ƒํ˜ธ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€