hyunjin

[C++][BOJ1541-잃어버린 괄호] 그리디,파싱,문자열,수학 본문

알고리즘 연습/백준

[C++][BOJ1541-잃어버린 괄호] 그리디,파싱,문자열,수학

_h.j 2021. 7. 10. 14:37
728x90

백준 1541 잃어버린 괄호

난이도 silver2

 

 

풀이

1. - 이후엔 모두 괄호로 묶는다.

2. 다음 - 나오기 전까지 괄호로 묶는다.

괄호에 포커스를 두니 위의 2가지 방법에 묶여 구현을 어렵게 생각했다. queue,stack 등장...

=> 다시 생각해보면 결국 - 이후 연산자는 다 - 로 처리하면 된다.

 

이것을 구현할때 주의점 역시 숫자에서 한번에 다 뽑아내려하지 말고

string num 하나 두어서 계속 쌓다가 연산자 파트에서 계산해주면 더 쉽게 풀린다.

 

소스 코드

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

int main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	string input;
	cin >> input;
	
	string num;
	int result = 0;
	bool isMinus = false;

	for(int i = 0 ; i <= input.size(); i++){
		if( input[i]=='-'|| input[i]=='+'|| i == input.size()){ //맨마지막 포함 
			if(isMinus){
				result -= stoi(num);
				num="";
			}
			else{
				result += stoi(num);
				num="";
			}
		}
		else{//숫자 
			num += input[i];
		}
		
		if (input[i]=='-'){
			isMinus=true;
		}

	}
	cout<<result;
}

문제 풀 때 input size 즉 마지막 순서에서 마지막 수를 처리해 줘야 하니 잊지 말고 제대로 해결하자....

문제 풀 때 정신 좀 차리길

 

 

stoi 에러 해결

과거 이름이 atoi() 였고 명칭이 바뀌였을 뿐 동작은 비슷하다고 한다.

문제 풀다가 dev c++에서 stoi를 제대로 인식 못하고 오류를 냈다.

stoi was not declared in this scope

Dev C++은  C++11이 아닌 GCC 컴파일러를 사용하는데 여기선 stoi()가 아닌 atoi()를 지원하기 때문이라 한다.

코드를 atoi() 로 바꾸거나 

컴파일러 설정을 C++11로 바꿔야한다.

Tools>Compiler Options>Settings>Code Generation>Language Standard(-std)를 GNU C++11로 바꾸면 끝

 

참고

dev c++ stoi 에러 해결

https://scarlettb.tistory.com/64

728x90