728x90
문제
https://www.acmicpc.net/problem/2578
문제 해석
이 문제는 이중 반복문을 통해 각 원소가 체크 됐는지 확인하고, 그 순간에 빙고를 확인하면 되는 문제이다.
가로 세로와 대각선 빙고 상황을 구분해서 확인하는 함수를 만들어 해결하였다.
풀이
const filePath = process.platform === "linux" ? "dev/stdin" : "../test.txt";
const input = require("fs").readFileSync(filePath).toString().trim().split("\n");
function solution(input) {
let board = [];
let visited = Array.from({ length: 5 }, () => Array(5).fill(0));
let nums = [];
let answer;
for (let i = 0; i < 5; i++) {
board.push(input[i].trim().split(" ").map(Number));
}
for (let i = 5; i < 10; i++) {
nums.push(input[i].trim().split(" ").map(Number));
}
//대각선 빙고 있는지 확인
const isCross = (visited) => {
let cnt = 0;
if (
//왼쪽 대각선
visited[0][0] &&
visited[1][1] &&
visited[2][2] &&
visited[3][3] &&
visited[4][4]
) {
cnt++;
}
if (
//오른쪽 대각선
visited[0][4] &&
visited[1][3] &&
visited[2][2] &&
visited[3][1] &&
visited[4][0]
) {
cnt++;
}
return cnt;
};
//가로세로 빙고 있는지 확인
const isLine = (visited) => {
let cnt = 0;
for (let i = 0; i < 5; i++) {
if (
//가로 빙고 확인
visited[i][0] &&
visited[i][1] &&
visited[i][2] &&
visited[i][3] &&
visited[i][4]
) {
cnt++;
}
if (
//세로 빙고 확인
visited[0][i] &&
visited[1][i] &&
visited[2][i] &&
visited[3][i] &&
visited[4][i]
) {
cnt++;
}
}
return cnt;
};
for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5; j++) {
const now = nums[i][j];
board.map((v, idx) => {
if (v.includes(now)) {
visited[idx][v.indexOf(now)] = 1;
}
});
let cross = isCross(visited);
let line = isLine(visited);
if (cross + line >= 3) {
answer = i * 5 + (j + 1);
i = 5;
break;
}
}
}
return answer;
}
console.log(solution(input));
끝
728x90
'WEB > 백준 문제 풀이' 카테고리의 다른 글
백준 3190번 뱀 (node.js) (0) | 2024.05.22 |
---|---|
백준 11536번 줄 세우기 (node.js) (0) | 2024.05.21 |
백준 14504번 로봇 청소기 (node.js) (0) | 2024.05.20 |
백준 2578번 덩치 (node.js) (0) | 2024.05.18 |
백준 2669번 직사각형 네개의 합집합의 면적 구하기 (node.js) (0) | 2024.05.15 |