seunghyun Note

[백준] 12789번 : 도키도키 간식드리미(스택 공부 부수기) with JS 본문

코딩테스트/프로그래머스

[백준] 12789번 : 도키도키 간식드리미(스택 공부 부수기) with JS

승숭슝현 2024. 1. 20. 16:56

 

링크 : https://www.acmicpc.net/problem/12789

 

12789번: 도키도키 간식드리미

인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두

www.acmicpc.net

문제 풀이

이 문제는 반례들을 생각하기보다는 주어진 예시만으로 접근을 해야 편하다.

(본인은 다른 반례들도 생각해 보니 시간이 너무 오래 걸렸다.)

init 값을 1로 설정해서 출발한다.

나는 일단 모든 array 값을 stack에 순차적으로 push부터 했다.

push 후에 스택 내에 순회를 하면서 init가 같다면 pop을 하고 init값을 +1 해서 비교해 주는 과정이었다.

마지막으로 stack 이 empty이면 "Nice" 아니면 "Sad"를 출력하게 한다.

figma 로 간단하게 그려봤는데 이해가 더 안될수도...!

const fs = require("fs");
//const [n,INPUT] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, INPUT] = fs.readFileSync("예제.txt").toString().trim().split("\n");
const input = INPUT.split(" ").map(Number);

//initialize
let init = 1;
let stack = [];
 
//function 
for (let value of input) {
  stack.push(value);
  while (stack.length > 0 && stack[stack.length - 1] === init) {
    stack.pop();
    init++;
  }
}

//result
if (stack.length > 0) console.log("Sad");
else console.log("Nice");

 

무엇이 어려웠는가?

문제를 너무 고차원적으로 생각하지 않기. 

일단 주어진 예시만으로 문제를 해결해 보자.

스택에 대한 이해도가 점점 올라가고 있는데 그림을 그리거나 순서도를 상상하면서 문제를 해결하기!

(문제 이름이 귀여움.. 인하대 승환이 화이팅!)

728x90