본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 쇠막대기 10799 (Javascript,c++)

by Cafe Mocha 2022. 6. 18.

10799번: 쇠막대기 (acmicpc.net)

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net


접근 방법

알고리즘 : 스택

 

1. 입력 값을 돌면서 레이저확인되면 스택값을 ans에 더한다.

2. 쇠막대기의 끝이보이면 ans++

 


Javascript

function solution() {
  let input = require("fs")
    .readFileSync("input.txt") //"/dev/stdin"
    .toString()
    .trim()
    .split("\n")
    .map((val) => val.trim());

  let arr = input[0].split("");
  let stk = [];
  let len = arr.length;
  let ans = 0;

  for (let i = 0; i < len; i++) {
    if (arr[i] === "(") {
      stk.push(arr[i]);
    } else {
      if (arr[i - 1] === "(") {
        stk.pop();
        ans += stk.length;
      } else {
        stk.pop();
        ans++;
      }
    }
  }

  console.log(ans);
}

solution();

 


C++

#include <bits/stdc++.h>
using namespace std;

int main()
{
  freopen("input.txt", "r", stdin); //제출 시 삭제

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    string s;
    cin>>s;

    int len = s.length();
    stack<char> stk;

    int ans =0;

    for (int i = 0; i < len; i++) {
    if (s[i] == '(') {
      stk.push(s[i]);
    } else {
      if (s[i - 1] =='(') {
        stk.pop();
        ans += stk.size();
      } else {
        stk.pop();
        ans++;
      }
    }
  }

  cout<<ans<<"\n";

  

}