직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다.
https://www.acmicpc.net/problem/1541
생각의 흐름
일단 생각보다 잘 안풀렸던 문제... 문자열 파싱이야 쉬운데... 최소의 값을 어떤 방식으로 만들것인가?
이걸 생각 못해서... 다른 블로그의 글을 참고하였다.
생각보다 간단하다, - (음수) 부호 뒤의 모든 수를 뺴주면 된다.
예를 들어 다음과 같은 예시가 있다고 해보자.
20-190+10+2-55
위 수식을 최소로 만들기 위한 괄호를 배치하면 다음과 같다.
20-(190+10+2)-55
즉, - 부호 뒤의 모든 수를 뺴주면 된다.
또한 코드에서 다음과 같이 한번에 if에서 확인하는 이유가 있다.
if (str[i] == '+' || str[i] == '-' || i == len)
원래 나같은 경우 전체 구조를 다음과 같이 생각했었다.
if (str[i] == '-') {
// ...
} else if (str[i] == '+' || i == len) {
// ...
} else {
num *= 10;
num += str[i] - '0';
}
하지만 - 나 +인 둘다 공통적으로 맨 처음 수는 res 변수에 그냥 담아줘야 하는 공통적인 과정이 있다.
또한 i == len 의 상황, 즉 문자열의 끝에 도달했을때도 공통적으로 처리하는 과정이 있다.
따라서 if에서 한번에 확인을 하게 되었다.
나의 코드
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
#define MAX 55
int res;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
string str;
cin >> str;
int len = str.length();
bool isMinus = false;
int num = 0;
for (int i = 0; i <= len; i++) {
if (str[i] == '+' || str[i] == '-' || i == len) {
if (isMinus){
res -= num;
} else {
res += num;
}
num = 0;
if (str[i] == '-') isMinus = true;
} else {
num *= 10;
num += str[i] - '0';
}
}
cout << res;
return 0;
}
'Algorithm > 백준' 카테고리의 다른 글
[백준][C++] 17143번: 낚시왕 <237> (0) | 2022.07.28 |
---|---|
[백준][C++] 10775번: 공항 <236> (0) | 2022.07.26 |
[백준][C++] 1074번: Z <234> (0) | 2022.07.11 |
[백준][C++] 4386번: 별자리 만들기 <233> (0) | 2022.07.10 |
[백준][C++] 12893번: 적의 적 <232> (0) | 2022.07.07 |
댓글