문제 정의
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1
55-50+40
예제 출력 1
-35
코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input;
cin>>input;
int sum=0;
bool flag = false;
int temp=0;
for(int i=0; i<=input.size(); i++){
if(input[i]=='-' || input[i]=='+' || i==input.size()){
if(flag == false){
sum += temp;
temp=0;
}
else if(flag == true){
sum -= temp;
temp=0;
}
if(input[i]=='-') flag=true;
}
else {
temp*=10;
temp+=input[i]-'0';
}
}
cout<<sum;
return 0;
}
n=input()
d1=list(n.split("-"))
value=0
result=0
for i, x in enumerate(d1):
value=0
d2=x.split("+")
for j in d2:
value+=int(j)
if(i==0):
result+=value
else:
result-=value
print(result)
생각 정리
enumerate 함수
index와 원소를 동시에 접근할 수 있다.
>>> for entry in enumerate(['A', 'B', 'C']):
... print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')
>>> for i, letter in enumerate(['A', 'B', 'C']):
... print(i, letter)
...
0 A
1 B
2 C
'문제풀이 > 그리디' 카테고리의 다른 글
[파이썬] [그리디] 백준 2217 로프 (0) | 2021.12.29 |
---|---|
[파이썬] [그리디] 백준 2437 저울 (0) | 2021.12.28 |
[파이썬] [그리디] 백준 1339 단어수학 (0) | 2021.12.24 |
[파이썬] [그리디] 백준 10162 전자레인지 (0) | 2021.12.24 |
[파이썬] [그리디] 모험가 길드 (0) | 2021.12.22 |