728x90
SMALL
백준 문제 풀이: 2578
문제 링크: https://www.acmicpc.net/problem/2578
문제 설명:
해당 문제는 빙고판에서 숫자를 불러, 3개의 빙고 줄이 완성되는 순간을 찾는 문제입니다. 문제의 전체 내용은 위 링크에서 확인할 수 있습니다.
문제 해결 코드
#include <iostream>
using namespace std;
pair<int, int> arr[26]; // 좌표 저장
int s[26];
int rowCnt[6] = {0}, colCnt[6] = {0}, diagCnt[3] = {0};
int totalCnt = 0;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
// 5x5 배열에 입력된 숫자의 좌표를 저장
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
int x;
cin >> x;
arr[x] = {i, j};
}
}
// 부른 숫자 순서 저장
for (int i = 1; i <= 25; i++) {
cin >> s[i];
}
// 숫자 하나씩 처리
for (int i = 1; i <= 25; i++) {
auto [r, c] = arr[s[i]]; // 좌표 가져오기
rowCnt[r]++;
colCnt[c]++;
if (r == c) diagCnt[1]++; // 첫 번째 대각선
if (r + c == 6) diagCnt[2]++; // 두 번째 대각선
// 빙고 개수 계산
if (rowCnt[r] == 5) totalCnt++;
if (colCnt[c] == 5) totalCnt++;
if (r == c && diagCnt[1] == 5) totalCnt++;
if (r + c == 6 && diagCnt[2] == 5) totalCnt++;
// 빙고가 3개 이상일 때 출력
if (totalCnt >= 3) {
cout << i << '\n';
return 0;
}
}
}
코드 설명
위 코드는 주어진 빙고판에서 숫자를 순서대로 부르며 빙고가 3줄 이상 완성되는 순간을 찾아 출력하는 알고리즘입니다. 주요 로직은 다음과 같습니다:
- 빙고판의 각 숫자의 좌표를
arr
배열에 저장합니다. - 입력된 순서대로 숫자를 불러 빙고 여부를 체크합니다.
- 가로, 세로, 대각선 빙고 줄의 상태를 각각 확인하고, 빙고 줄이 3개 이상이 되면 해당 숫자의 순서를 출력합니다.
결과
위 코드를 통해 문제를 해결할 수 있었으며, 효율적인 방식으로 빙고 여부를 확인하는 로직을 구현하였습니다. 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 1453번 [피시방 알바](C++) -yes6686- 티스토리 (0) | 2024.12.16 |
---|---|
백준 1871번 [좋은 자동차 번호판](C++) -yes6686- 티스토리 (1) | 2024.12.15 |
백준 1491번 [나선](C++) -yes6686- 티스토리 (0) | 2024.11.18 |
백준 5598번 [카이사르 암호](C++) -yes6686- 티스토리 (0) | 2024.11.18 |
백준 16918번 [봄버맨](C++) -yes6686- 티스토리 (0) | 2024.11.17 |