[코딩테스트 C++]잃어버린 괄호

후이재·2020년 10월 14일
0

오늘의 문제

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

잃어버린 괄호

나의 풀이

#include <iostream>
#include <vector>
using namespace std;

// 잃어버린 괄호
int solution(string s){
    int idx = 0;
    int sum = 0;
    vector<int> minus;
    for(int i=0;i<s.size();i++){
        if(s[i] == '-'){
            int a = stoi(s.substr(idx, i- idx));
            sum += a;
            idx = i+1;
            minus.push_back(sum);
            sum = 0;
        }else if(s[i] == '+' || i == s.size()-1){
            int a;
            if(i == s.size()-1)
                a = stoi(s.substr(idx, i-idx+1));
            else
                a = stoi(s.substr(idx, i- idx));
            sum += a;
            idx = i+1;
        }
    }
    minus.push_back(sum);
    
    int answer = minus[0];
    for(int i=1;i<minus.size();i++){
        answer -= minus[i];
    }
    return answer;
}

풀이 법

  • 최소로 만들 방법을 생각한다. +, -만 존재하므로 -가 최소로 만들 key이다. -의 왼쪽은 작게, 오른쪽은 크게 만들어야한다. 왼쪽은 -가 있다면 거기서 최소로 만들어두었기 때문에 신경쓰지않아도 되며, 오른쪽은 다음-가 나올때 까지 +를 하면 된다. 더해진 합은 minus벡터에 저장되어, 마지막에 -연산을 수행해준다.

모범 답안

#include <stdio.h>

int main()
{
  char cmd;
  int n,s,m=0;
  for(scanf("%d",&s);scanf("%c",&cmd),cmd!=10;)
  {
    if(cmd=='-')m=1;
    scanf("%d",&n);
    if(m)s-=n;
    else s+=n;
  }
  printf("%d",s);
  return 0;
}

배울 점

  • 이사람은 입력부터 시행했다. 프로그래머스의 특성에 맞춰 연습하다보니 이런것은 되도록 안하려고 한다.
profile
공부를 위한 벨로그

0개의 댓글