[BOJ][Python]빙고 #2578

MEIN_FIGUR·2021년 7월 21일
0

백준_문제풀이

목록 보기
5/21

https://www.acmicpc.net/problem/2578

📌풀이


내가 쓴 풀이(성공)

#빙고 성공 여부 리턴
def check_bingo(bingo):
    bingo_cnt = 0
    calc_2, calc_3 = 0, 0
    for idx in range(5):
        #가로
        if sum(bingo[idx]) == 0 :
            bingo_cnt += 1
        
        #세로
        calc_1 = 0
        for idx2 in range(5):
            calc_1 += bingo[idx2][idx]
        if calc_1 == 0 :
            bingo_cnt += 1
            
        #대각선
        calc_2 += bingo[idx][idx]
        calc_3 += bingo[idx][4-idx]
    
    if calc_2 == 0 :
        bingo_cnt += 1
    if calc_3 == 0 :
        bingo_cnt += 1
    
    #세 줄 이상인 경우, True를 리턴
    if bingo_cnt >= 3 :
        return True
    else :
        return False

#빙고 진행 상황
def bingo_sequence(bingo):
    #몇 개 불렀는지 저장하는 변수 cnt
    cnt = 0
    for _ in range(5):
        #사회자가 부르는 숫자들을 받아옴
        check_list = list(map(int,input().split()))
        
        for num in check_list:
        	#해당 번호의 위치를 확인하는 과정
            for idx in range(5):
                if num in bingo[idx]:
                    #찾은 숫자는 0으로 바꿔줌
                    bingo[idx][bingo[idx].index(num)] = 0
                    cnt += 1
                #빙고 완성된 경우 그 당시의 cnt값 리턴
                if cnt > 11 and check_bingo(bingo):
                    return cnt
                
    
bingo = []
#배열 생성
for _ in range(5):
    bingo.append(list(map(int,input().split())))
    
print(bingo_sequence(bingo))
  • bingo_sequence: 빙고를 진행하는 함수
    • 사회자가 부른 숫자의 갯수가 12(최소의 갯수로 빙고 3줄인 경우) 이상인 경우, 빙고가 완성됐는지 확인
  • check_bingo: 빙고가 몇 줄 있는지 확인하고, 3줄 이상인 경우 True를 리턴
    • 가로, 세로, 대각선을 확인

📌후기


더 짧게 효율적인 방법으로 구성하고 싶었는데, 생각보다 복잡하게 구현된 것 같다. 여전히 코드가 투박한 것 같다..

profile
Growing Developer

0개의 댓글