Algorithm

[๋ฐฑ์ค€] 2578. ๋น™๊ณ  python

๐Ÿณ ๋งํฌ

๋ฐฑ์ค€ 2578๋ฒˆ ๋น™๊ณ 

๐Ÿ• ๋ฌธ์ œ

๋น™๊ณ  ๊ฒŒ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

๋จผ์ € ์•„๋ž˜์™€ ๊ฐ™์ด 25๊ฐœ์˜ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋น™๊ณ ํŒ์— 1๋ถ€ํ„ฐ 25๊นŒ์ง€ ์ž์—ฐ์ˆ˜๋ฅผ ํ•œ ์นธ์— ํ•˜๋‚˜์”ฉ ์“ด๋‹ค

๋‹ค์Œ์€ ์‚ฌํšŒ์ž๊ฐ€ ๋ถ€๋ฅด๋Š” ์ˆ˜๋ฅผ ์ฐจ๋ก€๋กœ ์ง€์›Œ๋‚˜๊ฐ„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 5, 10, 7์ด ๋ถˆ๋ ธ๋‹ค๋ฉด ์ด ์„ธ ์ˆ˜๋ฅผ ์ง€์šด ๋’ค ๋น™๊ณ ํŒ์˜ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฐจ๋ก€๋กœ ์ˆ˜๋ฅผ ์ง€์›Œ๊ฐ€๋‹ค๊ฐ€ ๊ฐ™์€ ๊ฐ€๋กœ์ค„, ์„ธ๋กœ์ค„ ๋˜๋Š” ๋Œ€๊ฐ์„  ์œ„์— ์žˆ๋Š” 5๊ฐœ์˜ ๋ชจ๋“  ์ˆ˜๊ฐ€ ์ง€์›Œ์ง€๋Š” ๊ฒฝ์šฐ ๊ทธ ์ค„์— ์„ ์„ ๊ธ‹๋Š”๋‹ค.

์ด๋Ÿฌํ•œ ์„ ์ด ์„ธ ๊ฐœ ์ด์ƒ ๊ทธ์–ด์ง€๋Š” ์ˆœ๊ฐ„ "๋น™๊ณ "๋ผ๊ณ  ์™ธ์น˜๋Š”๋ฐ, ๊ฐ€์žฅ ๋จผ์ € ์™ธ์น˜๋Š” ์‚ฌ๋žŒ์ด ๊ฒŒ์ž„์˜ ์Šน์ž๊ฐ€ ๋œ๋‹ค.

์ฒ ์ˆ˜๋Š” ์นœ๊ตฌ๋“ค๊ณผ ๋น™๊ณ  ๊ฒŒ์ž„์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ฒ ์ˆ˜๊ฐ€ ๋น™๊ณ ํŒ์— ์“ด ์ˆ˜๋“ค๊ณผ ์‚ฌํšŒ์ž๊ฐ€ ๋ถ€๋ฅด๋Š” ์ˆ˜์˜ ์ˆœ์„œ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์‚ฌํšŒ์ž๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋ถ€๋ฅธ ํ›„ ์ฒ ์ˆ˜๊ฐ€ "๋น™๊ณ "๋ฅผ ์™ธ์น˜๊ฒŒ ๋˜๋Š”์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿพ ํ’€์ด ๋ฐฉ๋ฒ•

์‹œํ‚ค๋Š” ๋Œ€๋กœ ๊ตฌํ˜„๋งŒ ํ•ด์„œ, ์ž˜ ํ‘ผ ์ฝ”๋“œ์ธ์ง„ ๋ชจ๋ฅด๊ฒ ๋‹ค.
๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ numbers ๋ฆฌ์ŠคํŠธ ์•ˆ์˜ number๋ฅผ check๋ผ๋Š” ๋ฐฐ์—ด์—์„œ ๋™๊ทธ๋ผ๋ฏธ์นœ ํ›„, (๋™๊ทธ๋ผ๋ฏธ ์น˜๋Š” ํ–‰์œ„๋ฅผ 0->1๋กœ ๊ตฌํ˜„ํ•จ.) isBingo๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ€๋กœ, ์„ธ๋กœ, ์–‘ ๋ฐฉํ–ฅ ๋Œ€๊ฐ์„ ์—์„œ ๋น™๊ณ ๊ฐ€ ๋˜๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์—ˆ๋‹ค.

solution ์ฝ”๋“œ

import sys
sys.stdin = open("input.txt","r")
def isBingo():

    res = 0
    # ๊ฐ€๋กœ ํ™•์ธ
    for i in range(5):
        flag = True
        if 0 in check[i]:
            flag = False
        if flag:
            res += 1

    # ์„ธ๋กœ ํ™•์ธ
    check_T = list(map(list,zip(*check)))
    for i in range(5):
        flag = True
        if 0 in check_T[i]:
            flag = False
        if flag:
            res += 1


    # ๋Œ€๊ฐ์„ 
    r_flag, l_flag = True, True
    for i in range(5):
        if check[i][i] == 0:
            r_flag = False
        if check[i][4-i] == 0:
            l_flag = False
    if r_flag:
        res += 1
    if l_flag:
        res += 1

    if res >= 3:
        return True
    return False


bingo = list()
numbers = list()
check = [[0] * 5 for _ in range(5)]
count = 0

for _ in range(5):
    bingo.append(list(map(int, sys.stdin.readline().split())))
for _ in range(5):
    numbers.append(list(map(int, sys.stdin.readline().split())))

for number in numbers:
    while number:
        num = number.pop(0)
        count += 1

        for i in range(5):
            for j in range(5):
                if bingo[i][j] == num:
                    check[i][j] = 1
                    i = 5
                    break

        if count >= 5:
            if isBingo() == True:
                print(count)
                exit()