ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2578. [Python]빙고
    Python_알고리즘/Silver IV 2023. 2. 5. 00:16

    1. 문제

     

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

     

    2578번: 빙고

    첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로

    www.acmicpc.net

     

    2. 접근 방법

     

    • 시간 제한: 1초
    • 메모리 제한: 128MB
    • 구현

     

    3. 파이썬 코드

     

    # 내 빙고
    my_bingo = [ list(map(str,input().split())) for _ in range(5)]
    # 사회자가 부르는 빙고
    ans_bingo = [ list(map(str,input().split())) for _ in range(5)]
    # bingo 일치하는 값 저장 리스트
    bingo_list = [[], [], [], [], []]
    # 3줄비공 조건 확인
    flag = 0
    # 몇번째 숫자인지 체크
    cnt = 0
    
    # 정답 리스트를 순회하며 맞는 값들의 인덱스 찾기
    for i in ans_bingo:
        for j in i:
            # 매반복문 마다 몇번째 열을 반복중인지 확인하기 위한 변수
            row_cnt = 0
            for k in my_bingo:
            # 빙고 리스트에서 ans_bingo의 값과 같은 값을 찾기
                if j in k:
                # 만약 값이 같으면 리스트에 index 값 추가
                    bingo_list[row_cnt].append(k.index(j))
                row_cnt += 1
            # 몇번 반복했는지 횟수 체크
            cnt += 1
            # 최소 12번이상 시행해야 빙고가 3줄나올 수 있음
            if cnt >= 12:
            # bingo 갯수 체크, 각 열 체크변수들 생성
                bingo_cnt = 0
                one_cnt = 0
                two_cnt = 0
                three_cnt = 0
                four_cnt = 0
                five_cnt = 0
            # 빙고 리스트 => 인덱스 리스트 반복문시행
                for x in bingo_list:
                # 가로로 빙고가 있는지 체크
                    if len(x) == 5:
                        bingo_cnt += 1
                # 세로로 빙고가 있는지 체크
                    for y in x:
                        if y == 0:
                            one_cnt += 1
                        elif y == 1:
                            two_cnt += 1
                        elif y == 2:
                            three_cnt += 1
                        elif y == 3:
                            four_cnt += 1
                        elif y == 4:
                            five_cnt += 1
                    if one_cnt == 5:
                        bingo_cnt += 1
                    if two_cnt == 5:
                        bingo_cnt += 1
                    if three_cnt == 5:
                        bingo_cnt += 1
                    if four_cnt == 5:
                        bingo_cnt += 1
                    if five_cnt == 5:
                        bingo_cnt += 1
                # 대각선 빙고 체크
                if 4 in bingo_list[0] and 3 in bingo_list[1] and 2 in bingo_list[2] and 1 in bingo_list[3] and 0 in bingo_list[4]:
                    bingo_cnt += 1
                if 0 in bingo_list[0] and 1 in bingo_list[1] and 2 in bingo_list[2] and 3 in bingo_list[3] and 4 in bingo_list[4]:
                    bingo_cnt += 1
                # 빙고가 3줄 이상일 경우 종료
                if bingo_cnt >= 3:
                        flag = 1
                        break
                if flag == 1:
                    break
        if flag == 1:
            print(cnt)
            break

     

    4. 문제를 풀고난 후 생각

     

    • 빙고가 되는 조건이 어떤 조건들이 있는지 또한 어떻게 체크할지 생각을 많이 했던 문제이다.
    • 가로로 체크하는 조건은 쉽게 만들 수 있지만 세로로 체크하는 방법으로 5개의 열을 가지고있기 때문에 각각의 열의 값들이 갯수를 체크하는 방식으로 조건식을 구현하였고, 대각선 조건은 따로 직접적으로 조건식을 만들었다.
    • 순수한 구현문제여서 좀 더 간편한 방법이 있겠지만 현재 내가 만들 수 있는 방법으로는 위 방식이 최선이였다. 좀더 실력을 쌓고 다시 풀어보고 싶다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 빙고의 조건 어떻게 구현할지

    'Python_알고리즘 > Silver IV' 카테고리의 다른 글

    1120. [Python]문자열  (0) 2023.04.09
    1235. [Python]학생 번호  (0) 2023.04.01
    10610. [Python]30  (0) 2023.01.31
    1789. [Python]수들의 합  (0) 2023.01.30
    11047. [Python]동전 0  (0) 2023.01.30

    댓글

Designed by Tistory.