백준 2578 빙고 (파이썬)
일단 먼저!
파이참에서는 정상적으로 15가 잘 나오는데
백준에 제출하면 pass가 되지 않는다!
분명 문제가 있는 코드지만, 오늘 안에는 발견 못할 것 같다...!
빛나는 내일의 내가
발견하기 바라며, 일단 오늘의 코드를 올려본다.
내 코드
# 입력
bingo = [list(map(int, input().split())) for _ in range(5)] # 5*5의 빙고판
check = [0]*12 # 가로, 세로, 대각선 양방향을 체크를 위한 배열
count = 0 # 빙고 카운트
number = 0 # 몇 번째 숫자인지
for _ in range(5):
teacherL = list(map(int, input().split())) # 선생님이 불러줄 숫자 받기
for i in range(5):
t_number = teacherL[i] # 값 하나 받기
number += 1 # 몇 번째 들어온 숫자인지 체크
flag = 0 # 숫자 체크했으면 그만 돌기 위한 플래그
for x in range(5): # 빙고 돌면서 t_number 찾아 0으로 바꿔
for y in range(5):
if t_number == bingo[x][y]:
bingo[x][y] = 0
flag = 1 # 찾았으면 그만 돌래
if flag == 1: # 이미 찾은 애면 더 이상 반복X y포문에서 break
break
if flag == 1: # 이중포문이라 x밖으로 한 번 더 나가기
break
# [0 0 0 0 0/ 0 0 0 0 0/ 0/ 0]
# 가로세로대각선 체크
# 가로체크
for y in range(5): # 다섯번 돌면서 가로 5줄 각각 체크
s = 0 # 다 합쳐서 0이면 빙고라 더해줄 sum 값
for x in range(5):
s += bingo[x][y]
if s == 0:
check[y] += 1
if check[y] == 1:
count += 1
break
# 세로체크
for x in range(5):
s = 0
for y in range(5):
s += bingo[x][y]
if s == 0:
check[x+5] += 1
if check[x+5] == 1:
count += 1
break
# 대각선체크
s = 0
for x, y in zip(range(5), range(5)): # 한 번만
for _ in range(5):
s += bingo[x][y]
if s == 0:
check[10] += 1
if check[10] == 1:
count += 1
lst = list(range(4, -1, -1))
s = 0
for x, y in zip(lst, range(5)): # 한 번만
for _ in range(5):
s += bingo[x][y]
if s == 0:
check[11] += 1
if check[11] == 1:
count += 1
if count == 3:
break
# 카운트 3이면 빙고!
if count == 3:
print(number)
break
포인트 🔄
- 빙고를 카운트할
count
변수 - 선생님 입에서 나온 숫자의 순서를 카운트할
number
변수 - 가로, 세로, 대각선 체크할
[0]*12
를 차곡차곡 짜주는 게 포인트!
대각선을 위한 인덱스를 짜줄 때
for문 안에 2개의 변수를 동시에 돌려주는 방법을 배웠다.
zip메소드를 사용하는 것!
for loop에서 2개의 인덱스 사용 - zip메소드
물론 아직은 패쓰 못했지만 곧 패쓰할 예정..!
Author And Source
이 문제에 관하여(백준 2578 빙고 (파이썬)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shon4bw/백준-2578-빙고-파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)