[백준] 15729 방탈출 - javascript

Yongwoo Cho·2021년 12월 2일
0

알고리즘

목록 보기
53/104
post-thumbnail

📌 문제

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

📌 풀이

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");

let n = Number(input[0]);
let goal = input[1].split(" ").map(Number);

let arr = new Array(n).fill(0);
let cnt = new Array(n).fill(0);
let ans = 0;
for (let i = 0; i < arr.length; i++) {
  if (arr[i] !== goal[i] && cnt[i] % 2 === 0) {
    for (let j = 1; j <= 2; j++) {
      cnt[i + j]++;
    }
    ans++;
  }
  if (arr[i] === goal[i] && cnt[i] % 2 === 1) {
    for (let j = 1; j <= 2; j++) {
      cnt[i + j]++;
    }
    ans++;
  }
}
console.log(ans);

✔ 알고리즘 : 그리디

✔ 버튼이 눌릴때마다 배열을 갱신을 안해주는 것이 포인트이다.

✔ 버튼을 누르면 오른쪽의 두 개 버튼도 눌린다.

✔ 0으로 초기화된 배열과 쪽지에 적혀져있는 배열을 비교하며 다른 경우 버튼을 눌러준다.

  • arr[i]와 goal[i]가 다르고 cnt[i]가 짝수인 경우
    결과적으로 다른 경우이다. 버튼이 짝수번 눌린상태이므로 현재값은 초기값 arr[i]와 같다. 따라서 버튼을 눌러주고 오른쪽 두개의 cnt 배열을 1증가시켜준다.
  • arr[i]와 goal[i]가 다르고 cnt[i]가 홀수인 경우
    결과적으로 같은 경우이다. 버튼이 홀수번 눌린상태이므로 현재값은 초기값 arr[i]가 아니다. 따라서 버튼을 누르지 않는다.
  • arr[i]와 goal[i]가 같고 cnt[i]가 짝수인 경우
    결과적으로 같은 경우이다. 버튼이 짝수번 눌린상태이므로 현재값은 초기값 arr[i]와 같다. 따라서 버튼을 누르지 않는다.
  • arr[i]와 goal[i]가 같고 cnt[i]가 홀수인 경우
    결과적으로 다른 경우이다. 버튼이 짝수번 눌린상태이므로 현재값은 초기값 arr[i]가 아니므로 goal[i]와 다르다. 따라서 버튼을 눌러주고 오른쪽 두개의 cnt 배열을 1증가시켜준다.

✔ 난이도 : 백준 기준 실버 1

profile
Frontend 개발자입니다 😎

0개의 댓글