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