반응형
문제
빙고
https://www.acmicpc.net/problem/2578
풀이
설명
사회자가 몇 번째 수를 부른 후에 빙고를 외치게 되는지를 구하는 문제입니다.
일반적인 빙고 규칙을 가집니다.
빙고 카운트가 3개가 되어야 "빙고"를 외칠 수 있습니다.
숫자가 불릴 때마다 전체 빙고 개수를 확인하는 대신, 다음과 같은 방법을 사용했습니다.
- 각 숫자의 빙고판 상 위치를 저장합니다.
- 각 행, 열, 대각선별로 채워진 칸 수를 추적합니다.
- 불린 숫자의 위치에 해당하는 행, 열, 대각선만 업데이트합니다.
예시 코드
function solution() {
const TARGET_BINGO_COUNT = 3;
const n = 5;
const board = Array.from({ length: n }, () => input().split(" ").map(Number));
const numberPositions = new Map();
board.forEach((row, i) => {
row.forEach((num, j) => {
numberPositions.set(num, [i, j]);
});
});
const rowCounts = Array(n).fill(0);
const colCounts = Array(n).fill(0);
let diag1Count = 0,
diag2Count = 0;
let bingoCount = 0;
const calledNumbers = Array.from({ length: n }, () =>
input().split(" ").map(Number)
).flat();
for (let i = 0; i < calledNumbers.length; i++) {
const num = calledNumbers[i];
if (numberPositions.has(num)) {
const [row, col] = numberPositions.get(num);
updateBingo(row, col);
if (bingoCount >= TARGET_BINGO_COUNT) return i + 1;
}
}
return "No bingo";
function updateBingo(row, col) {
if (++rowCounts[row] === n) bingoCount++;
if (++colCounts[col] === n) bingoCount++;
if (row === col && ++diag1Count === n) bingoCount++;
if (row + col === n - 1 && ++diag2Count === n) bingoCount++;
}
}
'Coding Problem' 카테고리의 다른 글
[BOJ 2622] 삼각형만들기 (0) | 2025.03.21 |
---|---|
[BOJ 2659] 십자카드 문제 (0) | 2025.03.20 |
[BOJ 2548] 대표 자연수 (0) | 2025.03.17 |
[BOJ 10610] 30 (0) | 2025.03.16 |
[BOJ 3151] 합이 0 (0) | 2025.03.15 |