minzee
개발 기록장
minzee
전체 방문자
오늘
어제
  • 분류 전체보기 (93)
    • 회고록 (0)
    • 활동 (15)
      • 우아한테크코스 7기 FE 프리코스 (4)
      • 원티드 프리온보딩 FE 챌린지 (1)
      • 위니브 엠버서더 3기 (10)
    • CS 공부 (5)
    • 코테 공부 (44)
      • BOJ (33)
      • Computer Algorithm (10)
      • Data Structures (1)
    • 개발 공부 (25)
      • Modern JS Deep Dive (5)
      • JavaScript & TypeScript (3)
      • React (0)
      • React-Native (0)
      • HTML & CSS (7)
      • Git & GitHub (1)
      • Kotlin (2)
      • Python (3)
      • C++ (2)
      • Linux (1)
    • 학교 (3)
      • 2 - 1 학기 (3)
      • 4 - 1 학기 (0)
    • 자격증 (1)
      • TOPCIT (0)
      • 정보처리기사 (1)
      • SQLD (0)

블로그 메뉴

  • Github
  • Naver Blog
  • Instagram
hELLO · Designed By 정상우.
minzee

개발 기록장

코테 공부/BOJ

[백준] 2578번 - 빙고 (파이썬)

2024. 9. 16. 23:38

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


문제

빙고 게임은 다음과 같은 방식으로 이루어진다.

먼저 아래와 같이 25개의 칸으로 이루어진 빙고판에 1부터 25까지 자연수를 한 칸에 하나씩 쓴다

철수는 친구들과 빙고 게임을 하고 있다. 철수가 빙고판에 쓴 수들과 사회자가 부르는 수의 순서가 주어질 때, 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지를 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지 출력한다.

문제 탐색하기

5X5 빙고판이 있고, 3줄의 빙고가 완성이 되면 프로그램이 끝난다.

빙고는 같은 행, 같은 열, 대각선 2개로 한 줄이 완성이 된다.

대각선 1은 행과 열이 같은 숫자이면 된다. [0,0] [1,1] [2,2] [3,3] [4,4]

대각선 2는 행과 열의 합이 4이면 된다. [4,0] [3,1] [2,2] [1,3] [0,4]

코드 설계하기

우선 첫번째 줄 부터 다섯번째 줄까지는 bingo 배열에 저장 시킨다.

여섯번째 줄 부터는 사회자가 부르는 번호들이라서 따로 저장을 시키고, 하나의 숫자를 확인할때 마다 count++ 한

 

시도 회차 수정사항

코드를 설계하면서 계속 고민해도 답이 풀리지 않아서 검색해서 풀이를 보면서 이해하도록 노력했다.

코드

def check(tmp):
    # 가로
    for i in range(5):
        if bingo[i] == [0] * 5:
            tmp += 1
    # 세로
    for i in range(5):
        if all(bingo[j][i] == 0 for j in range(5)):
            tmp += 1
    # 대각선1
    if all(bingo[i][i] == 0 for i in range(5)):
        tmp += 1
    # 대각선2
    if all(bingo[i][4 - i] == 0 for i in range(5)):
        tmp += 1
    return tmp

bingo = [list(map(int, input().split())) for _ in range(5)]
speak = []
for _ in range(5):
    speak += list(map(int, input().split()))
cnt = 0
tmp = 0
for i in range(25):
    for x in range(5):
        for y in range(5):
            if speak[i] == bingo[x][y]:
                bingo[x][y] = 0
                cnt += 1
    if cnt >= 12:
        result = check(tmp)
        if result >= 3:
            print(i + 1)  # 배열은 0 부터 시작했으므로 
            break

 

저작자표시 (새창열림)

'코테 공부 > BOJ' 카테고리의 다른 글

[백준] 1010번 - 다리 놓기 (파이썬)  (0) 2024.09.19
[백준] 2775번 - 부녀회장이 될테야 (파이썬)  (0) 2024.09.18
[백준] 7568번 - 덩치 (파이썬)  (0) 2024.09.15
[백준] 2947번 - 나무 조각 (파이썬)  (0) 2024.09.14
[백준] 25305번 - 커트라인 (파이썬)  (1) 2024.09.13
    '코테 공부/BOJ' 카테고리의 다른 글
    • [백준] 1010번 - 다리 놓기 (파이썬)
    • [백준] 2775번 - 부녀회장이 될테야 (파이썬)
    • [백준] 7568번 - 덩치 (파이썬)
    • [백준] 2947번 - 나무 조각 (파이썬)
    minzee
    minzee
    🇩🇮🇬🇮🇹🇦🇱 🇲🇪🇩🇮🇦 & 🇸🇴🇫🇹🇼🇦🇷🇪 🇨🇴🇳🇻🇪🇷🇬🇪🇳🇨🇪

    티스토리툴바