프론트엔드 개발자의 기록 공간

[백준 node.js] 2847번_게임을 만든 동준이 본문

알고리즘_JS/백준_Greedy

[백준 node.js] 2847번_게임을 만든 동준이

[리우] 2021. 1. 17. 23:29

백준 그리디 알고리즘 2847번_게임을 만든 동준이

난이도 : 실버4 


문제 설명 

추가 입출력 예시

예제 입력2 => 5 9 5 6 2 5   예제 출력 2 => 20

예제 입력3 => 4 10 11 12 7   예제 출력3 => 18

 

문제 풀이 : 마지막 값이 제일 커야하므로 입력으로 받은 배열을 뒤집어 준다. 그 후 n번까지 앞에값을 기준으로 다음값을 계산해준다. 계산된 차이만큼 연산의 횟수가된다.

 

//실버4 게임을 만든 동준이
const solution = (n, list) => {
  // 현재 list는 역순 상태

  let cnt = 0; //연산 횟수
  //1부터 시작
  for (let i = 1; i < n; i++) {
    //이전값보다 현재값이 크거나 같다면 현재값을 감소 시켜야함
    if (list[i - 1] <= list[i]) {
      //현재값 - 이전값 + 1(이전값 보다 1이 작아야하므로)
      cnt += list[i] - list[i - 1] + 1;
      //현재값을 이전값 -1 보다 작은 값으로 설정
      list[i] = list[i - 1] - 1;
    }
  }
  console.log(cnt);
};

const readline = require("readline");
const { isRegExp } = require("util");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];
rl.on("line", function (line) {
  //여러줄 입력
  input.push(line);
}).on("close", function () {
  let n = Number(input.shift());
  let list = input.map((el) => Number(el));

  //list 역순으로 전달(큰값부터 연산 편하게 하기 위해)
  solution(n, list.reverse());
  process.exit();
});
728x90
Comments