백준 2578 빙고 (파이썬)

shon4bw·2021년 8월 26일
0

🧐1일 1알

목록 보기
16/24
post-thumbnail

일단 먼저!
파이참에서는 정상적으로 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메소드

물론 아직은 패쓰 못했지만 곧 패쓰할 예정..!

profile
cut_the_mustard

0개의 댓글