[BOJ] 백준 #1541. 잃어버린 괄호 (C++)

최대 1 분 소요

🎨 문제

boj-1541

문제 링크: https://www.acmicpc.net/problem/1541

  • 알고리즘 분류: 문자열 처리, 수학
  • 난이도: Silver Ⅱ



💬 풀이

입력받은 문자열을 숫자와 연산기호로 끊어서 잘 입력 받는 게(파싱) 그나마 문제였던 것 같다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만들라는 문제 내용 자체는 쉬웠다.

  1. ’+’나 ‘-‘ 기준으로 입력 받기
    👉🏻 i=len번째까지 돌고 input[i]=='\0'조건 이용
    👉🏻 stoi() 사용
  2. ’+’만 있으면 그냥 그대로 계산
    ‘-‘가 하나라도 나온 뒤부터는 ‘+’를 다 ‘-‘로 바꿔서 계산
    👉🏻 flag : 마이너스가 나오면 flag = true;
    👉🏻 좀 주의해야 했던 부분 : ‘-‘를 만나서 flag값을 바꿔주는 것의 순서를 뒤로 빼야된다는 것 ㅇㅇ



👩‍💻 코드

C++

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;

int main() {
	//freopen("input.txt", "rt", stdin);
	string input;
	cin >> input;
	int len = input.size();
	
	string n;
	int ans = 0;
	bool flag = false;
	for (int i = 0; i <= len; i++) {
		if (input[i] == '-' || input[i] == '+' || input[i] == '\0') {
			if (flag) {
				ans -= stoi(n);
				n = "";
			}
			else {
				ans += stoi(n);
				n = "";
			}

			if (input[i] == '-') { flag = true; }
		}
		else {
			n = n + input[i];
		}
	}
	cout << ans;

	return 0;
}


댓글남기기