Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 1780. ์ข…์ด์˜ ๊ฐœ์ˆ˜

deo2kim 2020. 10. 11. 08:11
๋ฐ˜์‘ํ˜•

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

  • S2 | ๋ถ„ํ• ์ •๋ณต

์ฒซ๋ฒˆ์งธ์— ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๋” ์ •๋‹ต์ธ๊ฑฐ ๊ฐ™๋‹ค( ๋‘˜๋‹ค ํ†ต๊ณผํ–ˆ์ง€๋งŒ )

์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ๋Š” ํ•ญ์ƒ 9๊ฐœ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ผ์„œ ์ง„ํ–‰ํ•œ๋‹ค. - ์ด๊ฒŒ ๋ฌธ์ œ๋ž‘ ๋” ๋งž๋Š”๊ฑฐ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ

๋‘๋ฒˆ์งธ ์ฝ”๋“œ๋Š” (์ฒ˜์Œ ํ’€์–ด์„œ ํ†ต๊ณผํ•˜๊ณ  ๋‹ค์‹œ๋ณด๋‹ˆ ์ด์ƒํ•จ) 9๊ฐœ์˜ ์กฐ๊ฐ์ด ์•„๋‹ˆ๋‹ค.

์ข…์ด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด 3x3์œผ๋กœ ๋‹ค ์ž˜๋ผ๋ฒ„๋ฆฐ๋‹ค.

๊ทธ๋ž˜๋„ ํ†ต๊ณผํ•œ๋‹ค.

์ด๊ฒŒ ๋˜๋„ค??

๋‚ด๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๊ฑด์ง€... ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๊ฑด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

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

from itertools import chain  # 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ 1์ฐจ์›๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์นœ๊ตฌ


def bt(paper):
    global a, b, c
    nn = len(paper)

    if len(set(chain.from_iterable(paper))) == 1:
        if paper[0][0] == -1:
            a += 1
        elif paper[0][0] == 0:
            b += 1
        else:
            c += 1
    else:
        if nn != 3:
            for i in range(0, nn, nn//3):
                for j in range(0, nn, nn//3):
                    tmp_paper = [row[j:j + nn//3] for row in paper[i:i + nn//3]]
                    bt(tmp_paper)
        else:
            for i in range(nn):
                for j in range(nn):
                    if paper[i][j] == -1:
                        a += 1
                    elif paper[i][j] == 0:
                        b += 1
                    else:
                        c += 1


n = int(input())
papers = [list(map(int, input().split())) for _ in range(n)]
a, b, c = 0, 0, 0
bt(papers)
print(f'{a}\n{b}\n{c}')

from itertools import chain


def bt(paper):
    global a, b, c
    nn = len(paper)

    if len(set(chain.from_iterable(paper))) == 1:
        if paper[0][0] == -1:
            a += 1
        elif paper[0][0] == 0:
            b += 1
        else:
            c += 1
    else:
        if nn != 3:
            for i in range(0, nn, 3):
                for j in range(0, nn, 3):
                    tmp_paper = [row[j:j + 3] for row in paper[i:i + 3]]
                    bt(tmp_paper)
        else:
            for i in range(nn):
                for j in range(nn):
                    if paper[i][j] == -1:
                        a += 1
                    elif paper[i][j] == 0:
                        b += 1
                    else:
                        c += 1


n = int(input())
papers = [list(map(int, input().split())) for _ in range(n)]
a, b, c = 0, 0, 0
bt(papers)
print(a)
print(b)
print(c)

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

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

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

 

1780๋ฒˆ: ์ข…์ด์˜ ๊ฐœ์ˆ˜

N×Nํฌ๊ธฐ์˜ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ์ข…์ด๊ฐ€ ์žˆ๋‹ค. ์ข…์ด์˜ ๊ฐ ์นธ์—๋Š” -1, 0, 1์˜ ์„ธ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ํ–‰๋ ฌ์„ ์ ์ ˆํ•œ ํฌ๊ธฐ๋กœ ์ž๋ฅด๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋‹ค์Œ์˜ ๊ทœ์น™์— ๋”ฐ๋ผ ์ž๋ฅด๋ ค๊ณ  ํ•œ๋‹ค.

www.acmicpc.net

๋ฐ˜์‘ํ˜•