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

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

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

백준 문제풀이/Nodejs

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

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

목차

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

문제

 

문제 구현 방향

생각보다 까다로운 문제이다. 주사위를 더하는 규칙을 찾았더라도 3면, 2면 일때 최솟값을 찾는 것이 까다롭다.

 

 

문제 풀이

주사위가 마주볼 경우에 그 값들은 최솟값이 될 수 없다.

따라서 다음과 같은 로직을 세울 수 있다.

javascript
for (let i = 0; i < 6; i++) {
  one = Math.min(one, v[i]);
  for (let j = i + 1; j < 6; j++) {
    if (i + j === 5) continue;
    two = Math.min(two, v[i] + v[j]);
    for (let k = j + 1; k < 6; k++) {
      if (i + k === 5 || j + k === 5) continue;
      three = Math.min(three, v[i] + v[j] + v[k]);
    }
  }
}

 

코드 구현

n은 1일때 예외처리하는 것 잊지 말자

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

let N = +input[0];
let v = input[1].split(" ").map(Number);
let one = Infinity,
  two = Infinity,
  three = Infinity;
let largest = 0,
  sum = 0;

for (let i = 0; i < 6; i++) {
  sum += v[i];
  largest = Math.max(largest, v[i]);
}

for (let i = 0; i < 6; i++) {
  one = Math.min(one, v[i]);
  for (let j = i + 1; j < 6; j++) {
    if (i + j === 5) continue;
    two = Math.min(two, v[i] + v[j]);
    for (let k = j + 1; k < 6; k++) {
      if (i + k === 5 || j + k === 5) continue;
      three = Math.min(three, v[i] + v[j] + v[k]);
    }
  }
}

let result;
if (N === 1) {
  result = sum - largest;
} else {
  result = 4 * three + (8 * N - 12) * two + (5 * N - 6) * (N - 2) * one;
}

console.log(result);
반응형