-
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