๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1992 ์ฟผ๋“œํŠธ๋ฆฌ (ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 7. 12.

๐ŸŽˆ๋ฌธ์ œ

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

 

๐ŸŽ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜?

1. ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ด 4๊ฐœ์˜ ์˜์—ญ์„ ์••์ถ•ํ•œ๋‹ค๋Š” ๋ถ€๋ถ„์—์„œ ๋ถ„ํ•  ์ •๋ณต, ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„์„ ๊นจ๋‹ฌ์•˜๋‹ค.

 

 

๐Ÿ’ป์ฝ”๋“œ

# 1992 ์ฟผ๋“œํŠธ๋ฆฌ

# 3. ์˜์ƒ ์••์ถ• ํ•ฉ์ˆ˜ ๋งŒ๋“ค๊ธฐ
# x: ์„ธ๋กœ, y: ๊ฐ€๋กœ
def compress(x,y,n):
    start = video[x][y] # ์‹œ์ž‘ ์ง€์ ์˜ ์ƒ‰ ์ €์žฅํ•ด๋‘๊ธฐ
    for i in range(x,x+n):
        for j in range(y,y+n):
            if video[i][j] != start:    # ๋‹ค๋ฅธ์ƒ‰ ๋‚˜์˜ค๋ฉด
                start = -1
                break

    if start == -1:
        print('(',end='')
        div_n = n//2    # 4๊ฐœ์˜ ์˜์ƒ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
        # 4 ๋ถ€๋ถ„ ๋ชจ๋‘ ์žฌ๊ท€๋กœ ํ™•์ธ
        compress(x,y,div_n) # 1๋ฒˆ์งธ ์˜์—ญ (0,0)
        compress(x,y+div_n,div_n)   # 2๋ฒˆ์งธ ์˜์—ญ (0,1)
        compress(x+div_n,y,div_n)   # 3๋ฒˆ์งธ ์˜์—ญ (1,0)
        compress(x+div_n,y+div_n,div_n) #4๋ฒˆ์งธ ์˜์—ญ (1,1)
        print(')',end='')
    elif start == 1:
        print(1,end='')
    else:
        print(0,end='')

# 1. ์˜์ƒ ํฌ๊ธฐ ์ž…๋ ฅ ๋ฐ›๊ธฐ
n = int(input())

# 2. ์˜์ƒ ์ž…๋ ฅ ๋ฐ›๊ธฐ
video = []
for i in range(n):
    video.append(list(map(int,input())))

result = [] # ์••์ถ• ๊ฒฐ๊ณผ ์ €์žฅ ๋ณ€์ˆ˜

# 4. ์˜์ƒ ์••์ถ•
compress(0,0,n)

 

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

1. ๋ถ„ํ•  ์ •๋ณต ๋ฌธ์ œ๋ฅผ ๋ช‡๋ฒˆ ํ’€์–ด๋ณด๋ฉด, ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋А์ •๋„ ํ‹€์ด ์žกํ˜€์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ตฌ์กฐ๋ฅผ ์™ธ์›Œ๋‘์ž

2. ์‹œ์ž‘์ง€์ ์˜ ์ƒ‰์„ ์ €์žฅํ•ด๋‘๊ณ , 2์ค‘ for๋ฌธ์„ ๋ชจ๋‘ ๋Œ๋ฉด์„œ ๋ชจ๋‘ ๊ฐ™์€ ์ƒ‰์ธ์ง€, ๋‹ค๋ฅธ ์ƒ‰์ด ์žˆ๋Š”์ง€ ํŒ๋‹จ์„ ๋จผ์ € ํ•œ๋‹ค.

3. ๋‹ค๋ฅธ ์ƒ‰์ด ์žˆ์„ ๊ฒฝ์šฐ 4๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ ์„œ ๊ฐ๊ฐ ์žฌ๊ท€์ ์œผ๋กœ 4๊ฐœ์˜ ์˜์—ญ์— ๋‹ค๋ฅธ์ƒ‰์ด ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.