ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 1992 ์ฟผ๋“œํŠธ๋ฆฌ with Python
    PS 2023. 3. 31. 17:57
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 1992 ์ฟผ๋“œํŠธ๋ฆฌ

    ๐Ÿ’ก ์กฐ๊ฑด

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

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ 1

    8
    11110000
    11110000
    00011100
    00011100
    11110000
    11110000
    11110011
    11110011

    ์‹คํ–‰๊ฒฐ๊ณผ 1

    ((110(0101))(0010)1(0001))

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๋ถ„ํ• ์ •๋ณต์˜ ๊ฐœ๋…์œผ๋กœ ํ•ด๊ฒฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.
    2. n ์„ 2์”ฉ ๋‚˜๋ˆ„์–ด ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ํฐ ๋‹จ์œ„์—์„œ ์ž‘์€ ๋‹จ์œ„๋กœ ๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.
    3. check() ํ•จ์ˆ˜๋กœ ๊ฐ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ mode ๋งŒํผ ๋–จ์–ด์ง„ ์ขŒํ‘œ๊นŒ์ง€ ์ˆซ์ž๊ฐ€ ๊ฐ™์€์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.
      ๋งŒ์•ฝ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, ๊ด„ํ˜ธ๋ฅผ ๋„ฃ๊ณ  ์žฌ๊ท€ํ•œ๋‹ค.
    4. ๊ฐ™๋‹ค๋ฉด 1ํ˜น์€ 0์„ ๋„ฃ์–ด์ค€๋‹ค.
    5. ์ขŒํ‘œ๋Š” ๋„ค ๋ฐฉํ–ฅ์ด๋‹ค. ์žฌ๊ท€๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค mode๋Š” ๋‘ ๋ฐฐ์”ฉ ์ค„์–ด๋“ ๋‹ค.

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin, setrecursionlimit
    
    setrecursionlimit(10 ** 6)
    
    n = int(stdin.readline())
    arr, ans = [], ''
    for i in range(n):
        arr.append(list(map(int, list(stdin.readline().rstrip()))))
    
    
    def check(x, y, mode):
        for i in range(x, x + mode):
            for j in range(y, y + mode):
                if arr[x][y] != arr[i][j]:
                    return False
        return True
    
    
    def solve(x, y, mode):
        global ans
    
        if check(x, y, mode):
            if arr[x][y] == 1:
                ans += '1'
            else:
                ans += '0'
    
        else:
            ans += '('
            solve(x, y, mode // 2)
            solve(x, y + mode // 2, mode // 2)
            solve(x + mode // 2, y, mode // 2)
            solve(x + mode // 2, y + mode // 2, mode // 2)
            ans += ')'
    
    
    solve(0, 0, n)
    print(ans)
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.