백준 2493 탑 js

2022. 1. 15. 12:22·Nodejs로 알고리즘 박살내기
 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

이번에 풀어 볼 문제는 스택 문제입니다.

 

풀이

스택을 이용한 풀이 과정을 간단히 한다면 다음과 같습니다.

반복문을 통해 탑(tops) 중에 왼쪽부터 시작하여 오른쪽으로 탐색하겠습니다.

탐색하는 동안 스택에는 이전에 탐색했던 탑들 중 현재 탑보다 높은 탑들과 현재 탑만 존재할 수 있도록 합니다.

 

∴ 따라서

if(다음 탑의 높이 > 현재탑의 높이) => 스택에 있는 높은 탑들 중 가장 근접한 탑부터 순차적으로 다음 탑과 비교 해 봅니다. 

만약 스택에서 다음 탑보다 더 높은 탑을 발견하였다면 높은 탑의 위치가 출력값이 되는것입니다.

그렇지 않다면, 다음 탑보다 더 높은 탑은 존재하지 않기에 0을 출력하게 되는것이죠.

 

자세한 설명은 코드의 주석으로 이어가겠습니다.

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

let N;

rl.on('line', function (line) {
  if(!N) {
    N = +line;
  } else {
    let tops = line.split(' ').map(n => +n);
    let answer = [];
    let stack = [];

    for(let i = 0; i < N; i++) {
      let now = tops[i]; // 현재 탑 

      // 현재 탑을 기준으로 
      // 가장 근접한 탑인 스택(stack[stack.length - 1])과 비교하여
      // 현재 탑보다 높이가 낮다면 스택에서 제거해줍니다.
      while(stack.length && tops[stack[stack.length - 1]] < now) {
        stack.pop();
      }

      if(stack.length === 0) {
        // 스택에 현재 탑보다 큰 탑이 없기때문에 0을 출력해줍니다.
        answer.push(0);
      } else {
        // 위 while문을 통해 현재 탑과 
        // 가장 근접한 탑중 높이가 더 낮은 탑은 스택에서 제거하였기 때문에
        // 남은 스택의 가장 근접한 탑(stack[stack.length - 1])인덱스에 1을 더해 출력해줍니다.
        answer.push(stack[stack.length - 1] + 1);
      }

      //현재 탑의 인덱스를 스택에 푸쉬해줍니다.
      stack.push(i);
    }

    console.log(answer.join(' '));
    rl.close();
  }
})

 

저작자표시 (새창열림)

'Nodejs로 알고리즘 박살내기' 카테고리의 다른 글

프로그래머스 LV.4 지형 이동 js  (1) 2022.03.11
백준 4386 별자리 만들기 js  (0) 2022.03.09
백준 1738 골목길 js  (0) 2022.03.09
백준 2473 세 용액 js  (0) 2022.01.13
백준 3020 개똥벌레  (0) 2022.01.12
'Nodejs로 알고리즘 박살내기' 카테고리의 다른 글
  • 백준 4386 별자리 만들기 js
  • 백준 1738 골목길 js
  • 백준 2473 세 용액 js
  • 백준 3020 개똥벌레
heesu
heesu
개발하면서 겪었던 경험을 공유합니다.
  • heesu
    heesu dev
    heesu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Nodejs로 알고리즘 박살내기
      • 사이드 프로젝트
        • Bitfolio
      • React Native
      • Etc
      • HTML
      • NextJS
      • Javascript
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    투 포인터
    Animated
    UnionFind
    BFS
    시맨틱 태그
    학습
    Nodejs
    JavaScript
    cleancode
    React Native
    우선순위 큐
    react-native
    certbot
    union-find
    최소 스패닝
    프로그래머스
    완전 탐색
    크루스칼
    lv4
    Dijkstra
    백준
    벨만포드 알고리즘
    dfs
    asyncstorage
    부분합
    letsencrypt
    크루스칼 알고리즘
    정렬
    redux-persist
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
heesu
백준 2493 탑 js
상단으로

티스토리툴바