Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

코딩핑

[백준 / javascript] 17484 진우의 달 여행(small) 본문

백준

[백준 / javascript] 17484 진우의 달 여행(small)

코딩핑 2023. 11. 1. 14:27

문제 설명)

 

🌙 지구의 어느위치에서든 출발하여 달의 어느위치든 착륙할 때 연료의 최소값을 구하는 문제 

 

조건 ) 우주선이 움직일 수 있는 방향은 다음과 같고, 두번 연속 같은 방향으로 움직일 수 없다

 

풀이)

 

const fs = require("fs");
const input = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n")
  .map((arr) => arr.split(" ").map((a) => Number(a)));

const num = input[0];

let min = [];


function check_min(prev, i, j, sum) {
  if (i === num[0]) {
    sum += input[i][j];
    min.push(sum);
    return;
  }
  sum += input[i][j];
  if (prev != -1 && j > 0) check_min(-1, i + 1, j - 1, sum);
  if (prev != 1 && j + 1 < num[1]) check_min(1, i + 1, j + 1, sum);
  if (prev != 0) check_min(0, i + 1, j, sum);
  return;
}

for (let i = 0; i < num[1]; i++) {
  check_min(2, 1, i, 0);
}

console.log(Math.min(...min));

 

첫줄에 지구와 달 사이 공간을 나타내는 행렬의 크기를 나타내는 N, M이 주어지고 다음 N줄 동안 각 행렬의 원소 값이 주어짐

-> 문자열로 읽은 값들을 정수 이차원 배열로 파싱!

(나는 아직 js초보라 초반에 값들을 정수로 안바꿔줘서 이상한 결과가 나왔었다ㅎ..ㅎ)

 

나는 우선 갈 수 있는 모든 경우의 수에 대한 연료값을 재귀함수인 check_min함수(dfs알고리즘)를 통해 구해주었다

function check_min(prev, i, j, sum) {
  if (i === num[0]) {
    sum += input[i][j];
    min.push(sum);
    return;
  }
  sum += input[i][j];
  if (prev != -1 && j > 0) check_min(-1, i + 1, j - 1, sum);
  if (prev != 1 && j + 1 < num[1]) check_min(1, i + 1, j + 1, sum);
  if (prev != 0) check_min(0, i + 1, j, sum);
  return;
}

  

재귀함수 안에서는 i가 num[0](행의 크기)인지 즉, 달에 도착했는지 확인해주고 도착했을 경우 min배열에 sum을 push해준다.

아닌 경우 현재 좌표값을 더해주고 갈 수 있는 세가지 방향에 대해 prev(이전 방향으로 -1또는 0 또는 1)과 같지 않을 경우 check_min을 호출 해준다!

(처음에는 sum을 전역변수로 두고 매개변수로 두지 않았었는데 그랬다가 경우의 수에 따른 연료값이 아니라 모든 연료값이 더해졌다😅)

 

마지막으로 min배열에서 Math.min()함수를 이용해 최솟값을 출력해주면 끝XD!

 

 

'백준' 카테고리의 다른 글

[백준 2579번 / js / dp] 계단 오르기  (0) 2024.04.01
[ 백준 / javascript ] 15649 N과 M(1)  (0) 2023.11.08
[백준 / javascript] 1436 영화감독 숌  (1) 2023.11.01