Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

백준 문제풀이/Nodejs

[백준][구현] 21608 상어초등학교 NodeJs구현

by 꽁이꽁설꽁돌 2024. 11. 1.
728x90
반응형

목차

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

    문제

     

    문제 구현 방향

    문제의 호흡이 길어서 그렇지 잘 따라가면 할 수 있는 문제이다.

    나는 문제의 조건을 정렬을 통해 해결해 주었다.

     

     

     

    코드 구현

    const input = require("fs")
      .readFileSync("./dev/stdin", "utf-8")
      .trim()
      .split("\n");
    
    let N = +input[0];
    let person = Math.pow(N, 2) + 1;
    
    let stList = Array.from(Array(person), () => Array(5));
    let board = Array.from(Array(person), () => Array(person).fill(0));
    
    let dx = [0, 0, 1, -1];
    let dy = [1, -1, 0, 0];
    function choice1(board, likeN) {
      let ans = [];
      for (let i = 1; i <= N; i++) {
        for (let j = 1; j <= N; j++) {
          let lks = 0;
          let et = 0;
          if (board[i][j]) continue;
          for (let p = 0; p < 4; p++) {
            let nx = j + dx[p];
            let ny = i + dy[p];
            if (nx < 1 || nx > N || ny < 1 || ny > N) continue;
    
            if (likeN.includes(board[ny][nx])) lks++;
            if (board[ny][nx] === 0) et++;
          }
          ans.push({ x: j, y: i, lks: lks, et: et });
        }
      }
      ans.sort((a, b) => {
        if (a.lks !== b.lks) return b.lks - a.lks;
        else {
          if (a.et !== b.et) return b.et - a.et;
          else {
            if (a.y !== b.y) return a.y - b.y;
            else return a.x - b.x;
          }
        }
      });
      if (ans.length === 0) {
        return 0;
      }
      return ans[0];
    }
    
    function satisfy(stList) {
      let sum = 0;
      for (let i = 1; i <= N; i++) {
        for (let j = 1; j <= N; j++) {
          let cnt = 0;
          let k = board[i][j];
          for (let p = 0; p < 4; p++) {
            let nx = j + dx[p];
            let ny = i + dy[p];
            if (nx < 1 || nx > N || ny < 1 || ny > N) continue;
            if (stList[k].includes(board[ny][nx])) cnt++;
          }
       
          switch (cnt) {
            case 0: {
              break;
            }
            case 1: {
              cnt = 1;
              break;
            }
            case 2: {
              cnt = 10;
              break;
            }
            case 3: {
              cnt = 100;
              break;
            }
            case 4: {
              cnt = 1000;
              break;
            }
          }
          sum += cnt;
        }
      }
      console.log(sum);
    }
    
    for (let i = 1; i < input.length; i++) {
      let ar = input[i].trim().split(" ").map(Number);
      for (let j = 1; j <= 4; j++) {
        stList[ar[0]][j] = ar[j];
      }
      let tg;
      if ((tg = choice1(board, ar.slice(1))) !== 0) {
        board[tg.y][tg.x] = ar[0];
      }
    }
    
    satisfy(stList);

     

    반응형