Problem Solving/BOJ

[백준 / BOJ] C++ 27969 I LOVE JavaScript

nageune 2023. 4. 19. 13:18
728x90
반응형

27969번: I LOVE JavaScript

 

문제

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

 

27969번: I LOVE JavaScript

한 줄에 걸쳐, ASON 객체의 유효한 표기가 주어진다. 주어지는 문자열의 길이는 스페이스 문자를 제외하고 $15\,000$ 이하이다.

www.acmicpc.net

 

 

풀이

ASON을 구성하는 것은 [, ], 문자열, 정수가 있고 각각 공백으로 구분되어 있으므로 각각을 토큰화하기 위해 while문 조건 안에 cin을 넣어 EOF가 발생할 때까지 공백을 기준으로 문자열을 입력받는다.

 

스택을 사용해 객체의 시작을 의미하는 [가 입력되면 0을 push한다.push 한다. 마찬가지로 정수가 입력되면 8을, 문자열이 들어오면 길이+12를 push 한다. 그리고 ]가 입력되면 [를 만나기 전까지 즉, 0이 나오기 전까지 모든 원소에 대해 top, pop을 반복하며 값을 더해준다. 마지막으로 0도 제거한 다음 (더한 값 + 8)을 push 해준다.

 

이를 모두 반복하고 나면 1개의 원소만 스택에 남아있게 되는데, 이게 답이므로 top을 출력하면 된다.

 

 

코드

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

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  stack<long long> s;
  string str;
  while (cin >> str) {
    if (str == "[") {
      s.push(0);
    } else if (isdigit(str[0])) {
      s.push(8);
    } else if (str == "]") {
      long long tmp = 0;
      while (s.top() != 0) {
        tmp += s.top();
        s.pop();
      }
      s.pop();
      s.push(tmp + 8);
    } else {
      s.push(str.size() + 12);
    }
  }
  cout << s.top();
  return 0;
}

 

728x90
반응형