문제 : www.acmicpc.net/problem/1541
알고리즘 : flag를 이용해서, -가 나오면 다음 연산은 sum을 -시키면 됨.
기존에 짰던 코드이다. 보기 복잡하고 코드 재사용도 많다.
일단 풀고보자 라는 느낌으로 코딩을 하였다.
근데 잘했던 점은, 성급하게 제출하지 않고 테스트케이스를 여러개 만들어서 테스트 해보고, 디버깅 후에 제출하였다.
짞짞 실력이 늘고있는것 같다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int charToInt(int* temp);
int main(void)
{
char arr[51];
scanf("%s", arr);
int flag = 0;
int num, sum = 0;
int temp[5];
temp[0] = temp[1] = temp[2] = temp[3] = temp[4] = -1;
int j = 0;
for (int i = 0; arr[i] != '\0'; i++)
{
if (arr[i] == '-') {
num = charToInt(temp);
j = 0;
if (flag == 1) { sum -= num; }
else { sum += num; }
flag = 1; // 이렇게 해야지 기호 다음부터 연산시작
continue;
}
else if (arr[i] == '+') {
num = charToInt(temp);
j = 0;
if (flag == 1) { sum -= num; }
else { sum += num; }
continue;
}
temp[j++] = arr[i] - 48;
}
num = charToInt(temp);
if (flag == 1) { sum -= num; }
else { sum += num; }
printf("%d", sum);
return 0;
}
int charToInt(int* temp)
{
int a = 0;
a = (temp[0] == -1) ? a : temp[0];
a = (temp[1] == -1) ? a : a * 10 + temp[1];
a = (temp[2] == -1) ? a : a * 10 + temp[2];
a = (temp[3] == -1) ? a : a * 10 + temp[3];
a = (temp[4] == -1) ? a : a * 10 + temp[4];
temp[0] = temp[1] = temp[2] = temp[3] = temp[4] = -1;
return a;
}
이렇게 짜는건 아무래도 아닌 것 같아서, 다시 수정하였다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int charToInt(int* temp);
int main(void)
{
char arr[51];
scanf("%s", arr);
int flag = 0;
int num, sum = 0;
int temp[5];
temp[0] = temp[1] = temp[2] = temp[3] = temp[4] = -1;
int j = 0;
for (int i = 0; arr[i] != '\0'; i++)
{
if (arr[i] != '-' && arr[i] != '+') { temp[j++] = arr[i] - 48; continue; }
num = charToInt(temp);
j = 0;
if (flag == 1) { sum -= num; }
else { sum += num; }
if (arr[i] == '-') {
flag = 1; // 이렇게 해야지 기호 다음부터 연산시작
}
}
num = charToInt(temp); // 마지막 숫자도 연산해주어야함.
if (flag == 1) { sum -= num; }
else { sum += num; }
printf("%d", sum);
return 0;
}
int charToInt(int* temp)
{
int a = 0;
a = (temp[0] == -1) ? a : temp[0];
a = (temp[1] == -1) ? a : a * 10 + temp[1];
a = (temp[2] == -1) ? a : a * 10 + temp[2];
a = (temp[3] == -1) ? a : a * 10 + temp[3];
a = (temp[4] == -1) ? a : a * 10 + temp[4];
temp[0] = temp[1] = temp[2] = temp[3] = temp[4] = -1;
return a;
}
확실히 보기 좋다.
테스트케이스 :
55-50+40
40+60-70+30-10+20
30+40+10-40-30-20
50000+50000+50000+50000
50000-50000-50000-50000
2048+2046+10578+00011-88888
걸린시간 : 63분 (21분 알고리즘, 42분 코딩 및 디버깅)
'프로그래밍 > 개발 이야기' 카테고리의 다른 글
[백준] 1946번 문제풀이 (0) | 2021.04.07 |
---|---|
[백준] 2217번 문제풀이 (2) | 2021.04.07 |
[백준] 13305번 문제풀이 (2) | 2021.04.06 |
[백준] 11399번 문제풀이 (0) | 2021.04.05 |
[백준] 16953번 문제풀이 (0) | 2021.04.05 |
댓글