[C++]BOJ 1541 - 잃어버린 괄호

[C++]BOJ 1541 - 잃어버린 괄호

가장 작은 답이 나오려면 +끼리 괄호로 묶고 계산하면 된다. 라고 생각했지만 계속 반례가 생각나서 이건 아닐 거라고 판단했고 그냥 첫 번째 -가 나온 순간부터 다 빼버리면 처음 생각했던 것보다 단순하게 끝난다.

+아스키코드 10은 line feed (다음 줄)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
bool ch = false;
int a, b;
char c;
scanf("%d", &a);
for(;scanf("%c", &c), c != 10;)
{
if(c == '-') ch = true;
scanf("%d", &b);
if(ch) a -= b;
else a += b;
}
cout << a;
}

cin으로 받아보려 했으나 작동이 안 돼서 scanf로 받았다.

자료형을 정확히 명시해줘야 하는 것 같다.

추가로 for 문에 대해 새로 알게 된 점.

for(시작할 때 한 번만 실행; 조건문 말고도 scanf 같은 거 사용 가능, 한번 돌 때마다 조건문 확인해서 매번 실행되는 듯; 증감식, 여기도 매번 실행)

더 찾아봐야 알겠지만 이런 느낌인 듯.

이렇게도 될까?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main()
{
bool ch = false;
int a, b;
char c;
for(scanf("%d", &a); scanf("%c", &c), c != 10;)
{
if(c == '-') ch = true;
scanf("%d", &b);
if(ch) a -= b;
else a += b;
}
cout << a;
}

된다. 2바이트 줄였다.