[Node.js] 백준 Javascript 4396 지뢰 찾기

2024. 6. 1. 04:09·🏆 PS(Problem Solving)/Baekjoon

1. 문제

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

 

 

2. 풀이과정

1. 지뢰 정보만 있는 배열 mines를 구성한다.

2. 사용자가 밟은 땅 정보 배열 opend를 구성한다.

3. 사용자가 밟은 땅을 전체 순회하면서, 만약 해당 위치가 'x'라면 주변 8방향으로 지뢰 갯수 확인하고 표시한다.

4. 만약 사용자가 지뢰를 밟은 적이 있다면, 모든 지뢰를 공개한다.

5. 최종적으로 표시한 전체 배열을 출력합니다.

 

❗주의할 점

만약 'x' 위치가 지뢰라면 'x'와 상관없이 보드판의 모든 지뢰를 표시해야한다. 이를 위해 hitMine 변수를 사용

 

 

3. 자바스크립트 정답코드

const fs = require('fs');
const filepath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filepath).toString().split('\n');

const n = parseInt(input.shift());
const mines = input.slice(0, n).map(line => line.split(''));
const opend = input.slice(n, 2 * n).map(line => line.split(''));

// 사용자가 지뢰를 밟은 경우를 추적하는 변수
let hitMine = false;

const dr = [0, -1, 0, 1, -1, -1, 1, 1];
const dc = [1, 0, -1, 0, 1, -1, 1, -1];


function main() {
    for (let i = 0; i < n; i++){
        for (let j = 0; j < n; j++){
            if (opend[i][j] == 'x') { // 사용자가 연 보드판이라면
                opend[i][j] = countAdjacentMines(i, j); //지뢰 확인
            }
        }
    }

    // 만약 사용자가 지뢰를 밟았다면 모든 지뢰를 공개함
    if (hitMine) {
        revealAllMines();
    }

    // 결과 출력
    printResult();
}

// 해당 위치 주변의 지뢰 갯수 반환 함수
function countAdjacentMines(r, c) {
    if (mines[r][c] === '*') { // 만약 해당 위치에 지뢰가 있다면
        hitMine = true; // 지뢰를 찾았음을 표시
        return '*'; // '*' 반환
    }

    let count = 0;
    for (let i = 0; i < 8; i++) { // 8방향으로 검사하여 주변 지뢰의 갯수 계산
        let nr = r + dr[i], nc = c + dc[i];
        if (nr < 0 || nc < 0 || nr >= n || nc >= n) continue; //범위를 벗어나는 경우
        if (mines[nr][nc] === '*') count++;
    }
    return count;
}

// 만약 지뢰를 밟은 경우, 모든 지뢰를 공개시키는 함수
function revealAllMines() {
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            if (mines[i][j] === '*') {
                opend[i][j] = '*';
            }
        }
    }
}

// 결과 출력 함수
function printResult() {
    for (let i = 0; i < n; i++) {
        console.log(opend[i].join(''));
    }
}

// 메인 함수 실행
main();

'🏆 PS(Problem Solving) > Baekjoon' 카테고리의 다른 글

[Node.js] 백준 Javascript 1244 스위치 켜고 끄기  (0) 2024.06.01
[C++] 백준 4396 지뢰 찾기  (0) 2024.06.01
[Node.js] 백준 javascript 2578 빙고  (0) 2024.05.30
[C++] 백준 2578 빙고  (0) 2024.05.30
[C++] 백준 20546 기적의 매매법  (1) 2024.05.29
'🏆 PS(Problem Solving)/Baekjoon' 카테고리의 다른 글
  • [Node.js] 백준 Javascript 1244 스위치 켜고 끄기
  • [C++] 백준 4396 지뢰 찾기
  • [Node.js] 백준 javascript 2578 빙고
  • [C++] 백준 2578 빙고
그해 준서는
그해 준서는
컴퓨터공학과 학생의 성장을 기록을 하는 블로그입니다.
  • 그해 준서는
    비트로 그리는 성장일기
    그해 준서는
  • 전체
    오늘
    어제
    • 분류 전체보기 (58)
      • 🏆 PS(Problem Solving) (29)
        • Baekjoon (24)
        • Programmers (0)
        • groomLevel (5)
      • 💻 Computer Science (4)
        • Data structure (3)
        • Algorithm (1)
        • Network (0)
        • OS (0)
        • DB (0)
      • 👨‍💻 Programming (22)
        • WEB (7)
        • HTML (10)
        • JavaScript (2)
        • Embedded (1)
        • C++ (2)
      • 🌍 Life (2)
        • 1일 1글쓰기 (0)
        • 오늘의 경제 (0)
        • 맛집 (0)
      • 새로고침 (0)
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 방명록
  • 링크

    • Git Hub
  • 공지사항

  • 인기 글

  • 태그

    스택
    HTML
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
그해 준서는
[Node.js] 백준 Javascript 4396 지뢰 찾기
상단으로

티스토리툴바