치춘짱베리굿나이스

[백준] 23253 본문

자료구조는 정말 최고야

문제

찬우는 스택을 배운 뒤 자료구조 과목과 사랑에 빠지고 말았다.

자료구조 과목만을 바라보기로 다짐한 찬우는 나머지 과목의 교과서 N권을 방 구석에 M개의 더미로 아무렇게나 쌓아 두었다. 하지만 중간고사가 다가오자 더 이상 자료구조만 공부할 수는 없었고, 결국 찬우는 팽개쳤던 나머지 과목의 교과서를 정리하고 번호순으로 나열하려 한다.

N권의 교과서는 각각 1부터 N까지의 번호가 매겨져 있다. 찬우는 각 더미의 맨 위에 있는 교과서만 꺼낼 수 있으며, 반드시 교과서를 꺼낸 순서대로 나열해야 하기 때문에 번호순으로 나열하기 위해서는 1번, 2번, … N - 1번, N번 교과서 순으로 꺼내야 한다. 교과서를 올바르게 나열할 수 없다면 중간고사 공부를 때려치겠다는 찬우를 위해 번호순으로 나열할 수 있는지 여부를 알려주는 프로그램을 작성해 주자.

입력

첫째 줄에 교과서의 수 N, 교과서 더미의 수 M이 주어진다.

둘째 줄부터 2 * M줄에 걸쳐 각 더미의 정보가 주어진다.

i번째 더미를 나타내는 첫 번째 줄에는 더미에 쌓인 교과서의 수 k(i) 가 주어지며, 두 번째 줄에는 k(i) 개의 정수가 공백으로 구분되어 주어진다.

각 정수는 교과서의 번호를 나타내며, 아래에 있는 교과서의 번호부터 주어진다.

교과서의 번호는 1부터 N까지의 정수가 한 번씩만 등장한다.

출력

올바른 순서대로 교과서를 꺼낼 수 있다면 Yes를, 불가능하다면 No를 출력한다.

풀이

const dataStructureIsGreat = () => {
  let input = require("fs")
    .readFileSync("/dev/stdin")
    .toString()
    .trim()
    .split("\n");
  input.shift();
  for (let i of input) {
    let arr = i.split(" ").map((n) => {
      return parseInt(n);
    });
    for (let j = 0; j < arr.length - 1; j++) {
      if (arr[j] < arr[j + 1]) {
        console.log("No");
        return;
      }
    }
  }
  console.log("Yes");
  return;
};

dataStructureIsGreat();

반성회

하나의 더미에라도 책이 내림차순으로 정렬되어 있지 않다면 올바른 순서대로 교과서를 꺼낼 수 없다

스택을 쓰라는 건 함정이었던듯... 그거 써서 실제로 책을 꺼내다 보면 시간초과 걸림

'Javascript + Typescript > 자바스크립트로 알고리즘풀기' 카테고리의 다른 글

[백준] 9012  (0) 2022.02.08
[백준] 5966  (0) 2022.02.08
[백준] 1018  (0) 2022.02.08
[백준] 1181  (0) 2022.02.08
[백준] 1436  (0) 2022.02.08
Comments