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

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

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

백준 문제풀이/Nodejs

[백준][구현] 2116 주사위 쌓기 NodeJs 구현

by 꽁이꽁설꽁돌 2025. 3. 31.
728x90
반응형
     

목차

  1. 문제
  2. 문제 구현 방향
  3. 문제 풀이
  4. 코드 구현
  5. 참고

문제

 

 

문제 구현 방향

맨 아래 주사위를 기준으로 모두 해보면 된다.

6 * 100000 정도라 시간은 충분하다.

 

 

문제 풀이

주사위 전개도에 따른 마주보는 관계 함수만 만들어 주면 쉽게 풀린다.

인덱스를 기준으로 0-5, 1-3, 2-4가 마주보게 된다.

javascript
function convert(num) {
  if (num === 0) return 5;
  else if (num === 5) return 0;
  else if (num === 1) return 3;
  else if (num === 3) return 1;
  else if (num === 2) return 4;
  else if (num === 4) return 2;
}

 

 

코드 구현

javascript
const input = require("fs")
  .readFileSync("./dev/stdin", "utf-8")
  .trim()
  .split("\n");

let N = +input[0];
let arr = [];
let idx = 1;
let ans = 0;

function convert(num) {
  if (num === 0) return 5;
  else if (num === 5) return 0;
  else if (num === 1) return 3;
  else if (num === 3) return 1;
  else if (num === 2) return 4;
  else if (num === 4) return 2;
}

//윗면과 아랫면 idx를 제외하고 배열을 반환해주는 함수 
function choice(a, b, arr) {
  let t = [];
  for (let i = 0; i < 6; i++) {
    if (i !== a && i !== b) {
      t.push(arr[i]);
    }
  }
  return t;
}

while (idx < input.length) {
  arr.push(input[idx].trim().split(" ").map(Number));
  idx++;
}

for (let i = 0; i < 6; i++) {
  let top = arr[0][i];
  let cnt = Math.max(...choice(i, convert(i), arr[0]));

  for (let j = 1; j < N; j++) {
    let idx = arr[j].indexOf(top); //윗면의 인덱스를 찾아 준다.
    top = arr[j][convert(idx)]; // 마주보는 면이 새로운 top
    cnt += Math.max(...choice(idx, convert(idx), arr[j]));
  }
  ans = Math.max(ans, cnt);
}
console.log(ans);

 

 

참고

아래와 유사한 문제라 풀어보면 좋을 것 같다.

https://be-senior-developer.tistory.com/317

 

[백준][구현] 주사위 1041 NodeJs 구현

목차문제 문제 구현 방향생각보다 까다로운 문제이다. 주사위를 더하는 규칙을 찾았더라도 3면, 2면 일때 최솟값을 찾는 것이 까다롭다.  문제 풀이주사위가 마주볼 경우에 그 값들은 최솟값

be-senior-developer.tistory.com

 

반응형