Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 1992. ์ฟผ๋“œํŠธ๋ฆฌ

deo2kim 2020. 8. 27. 08:21
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

1. ๋ถ„ํ• ์ •๋ณต | S1

2. ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ๋‹ค

3. ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ๋ฅผ ์ฐจ๋ก€๋กœ ์ชผ๊ฐœ์„œ ๋ชจ๋‘ 1์ด๋‚˜ 0์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ 

4. ์•„๋‹ ๊ฒฝ์šฐ ๋‹ค์‹œ ์ชผ๊ฐœ์„œ ํ™•์ธํ•œ๋‹ค.

 

๐Ÿ’จ ๋งจ ์ฒ˜์Œ ๋ฐฐ์—ด์ด ๋ชจ๋‘ 1์ธ์ง€ 0์ธ์ง€ ํ™•์ธ์„ ์•ˆํ•ด์„œ ์ž ์‹œ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๋ฌธ์ œ!!! ๋‹ต์ด 0์ด๋‚˜ 1์ด ๋  ์ˆ˜ ์žˆ๋‹ค

๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์‰ฌ์šฐ๋‚˜ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ต์„ ์ถœ๋ ฅํ•˜๋Š”๊ฒŒ ํž˜๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋งจ ์ฒ˜์Œ ํ•จ์ˆ˜์— ๋“ค์–ด์™”๋‹ค๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ๋ฌถ์Œ์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ์ ˆํžˆ ๋ฌถ์–ด์ค€๋‹ค.( ์‹œ์ž‘ํ•  ๋•Œ ๋๋‚  ๋•Œ)

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

from itertools import chain
# 2์ค‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹จ์ผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ chain ํ•จ์ˆ˜ ์‚ฌ์šฉํ–ˆ์Œ


def compression(lst):
    global answer
    length = len(lst) // 2

    answer += '('

    # ์™ผ์ชฝ ์œ„
    llst = lst[:length]
    for i in range(length):
        llst[i] = llst[i][:length]
    sum_llst = sum(list(map(int, chain.from_iterable(llst))))
    if sum_llst == length ** 2:
        answer += '1'
    elif sum_llst == 0:
        answer += '0'
    else:
        compression(llst)

    # ์˜ค๋ฅธ์ชฝ ์œ„
    llst = lst[:length]
    for i in range(length):
        llst[i] = llst[i][length:]
    sum_llst = sum(list(map(int, chain.from_iterable(llst))))
    if sum_llst == length ** 2:
        answer += '1'
    elif sum_llst == 0:
        answer += '0'
    else:
        compression(llst)
    # ์™ผ์ชฝ ์•„๋ž˜
    llst = lst[length:]
    for i in range(length):
        llst[i] = llst[i][:length]
    sum_llst = sum(list(map(int, chain.from_iterable(llst))))
    if sum_llst == length ** 2:
        answer += '1'
    elif sum_llst == 0:
        answer += '0'
    else:
        compression(llst)

    # ์˜ค๋ฅธ์ชฝ ์•„๋ž˜
    llst = lst[length:]
    for i in range(length):
        llst[i] = llst[i][length:]
    sum_llst = sum(list(map(int, chain.from_iterable(llst))))
    if sum_llst == length ** 2:
        answer += '1'
    elif sum_llst == 0:
        answer += '0'
    else:
        compression(llst)

    answer += ')'


# ์‹œ์ž‘ ----------------------------------------------------
N = int(input())
image = [list(input()) for _ in range(N)]

answer = ''
# ์ตœ์ดˆ ํ™•์ธ
sum_image = sum(list(map(int, chain.from_iterable(image))))
if sum_image == len(image) ** 2:
    answer += '1'
elif sum_image == 0:
    answer += '0'
else:
    compression(image)
print(answer)

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/1992

 

1992๋ฒˆ: ์ฟผ๋“œํŠธ๋ฆฌ

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

www.acmicpc.net


๋ฌธ์ œ

ํ‘๋ฐฑ ์˜์ƒ์„ ์••์ถ•ํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์ฟผ๋“œ ํŠธ๋ฆฌ(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์˜ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์˜์ƒ์˜ ๊ฐ ์ ๋“ค์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ถœ๋ ฅ

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

๋ฐ˜์‘ํ˜•