백준 / 실버 4 / 2578 빙고 / Python [구현, 맵, 완전탐색]

jjin·2023년 10월 17일
0

https://wikidocs.net/216575

풀이

처음 틀린 이유

이론상 둘 씩 세 곳이 겹칠 수 있으므로 12개 칠했을 때부터 3 빙고가 가능합니다.
근데 나는 세 개가 동시에 교차하는 경우만 두 개 검토하고서 13개부터 가능하다고 풀이를 작성해나갔기 때문입니다.

교훈

이번 것은 엣지 케이스를 잘 검토하지 않고 구현부터 한 것이 시간을 잡아먹은 원인이었습니다. 시간 더 쓰더라도 요구사항 & 엣지 정확히 정립하고 넘어가는 것을 추천합니다. 나중에 어디서 문제생겼나 디버깅하는게 더 걸린다고 생각합니다.

실제 코테에서 exit 써도 될까?

채점 프로그램이 종료되기 때문입니다.
flag를 주든 해서 return 시키면 됩니다.

제출

import sys
input = sys.stdin.readline

my = dict()
official = [False] * 26

def findBingo():
    ans = 0
    for y in range(5):
        cnt = 0
        for x in range(5):
            if not official[y*5 + x]: # 가로
                break
            cnt += 1
        if cnt == 5:
            ans += 1
    for y in range(5):
        cnt = 0
        for x in range(5):
            if not official[x*5 + y]: # 세로
                break
            cnt += 1
        if cnt == 5:
            ans += 1
    cnt = 0
    for y in range(5):
        if not official[y*5 + y]: # 대각
            break
        cnt += 1
    if cnt == 5:
        ans += 1
    cnt = 0
    for y in range(5):
        if not official[y*5 + 4-y]: #역대각
            break
        cnt += 1
    if cnt == 5:
        ans += 1
        
    return ans

i = 0
for _ in range(5):
    l = list(map(int, input().split()))
    for num in l:
        my[num] = i
        i += 1
        
answer = 0
for _ in range(5):
    l = list(map(int, input().split()))
    for num in l:
        idx = my[num]
        official[idx] = True
        answer += 1
        
        if answer < 12:
            continue
        
        if findBingo() >= 3:
            print(answer)
            exit(0)
profile
진짜

0개의 댓글