마이너스를 기준으로 괄호를 쳐주면 된다.
55 - (50 + 40) = - 35
이런식으로 최솟값을 구해주면 된다.
어떤식으로 진행해야되나 고민했는데 문자열형태로 받아야된다고 생각했다. -와 +를 처리해야되기 때문이다.
그러면 str배열에 55-50+40 을 입력하면 str[0] = '5', str[1] = '5', str[2] = '-'... 이런식으로 저장되는데 먼저 각 자릿수를 int형으로 즉 '5' '5'를 숫자 55로 바꾸어주어야 하는구나 싶었다.
그리고 '-'가 있으면 따로 빼서 처리를 해주어야 하는데 중간에 +가 끼어있어서 코드가 길어졌다.. 잘 먹지도 않고..
결국 다른사람 코드를 봤다..
while (i < len)
{
if (str[i] == '-')
{
i = i + 1;
while (str[i] != '\0' || str[i] == '-')
{
if (str[i] >= '0' && str[i] <= '9')
{
sum = sum * 10;
sum = sum + str[i] - '0';
}
else if (str[i + 1] == '\0' || str[i + 1] == '-' || str[i + 1] == '+')
{
arr[k] = sum * -1;
sum = 0;
k++;
}
i++;
}
}
else if 부분에서 자꾸 이상하게 빠졌다. +같은 그런걸 처리해주려고 했는데 시간이 너무 소모됐다.. 다른사람 코드 보고 이해를 해보자.
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[51];
int arr[25] = {0};
scanf("%s", str);
int len = strlen(str);
int i, j = 0, k = 0, temp = 0, sum = 0, result = 0;
for (i = 0; i <= len; i++)
{
if (str[i] == '-' || i == len)
{
sum = sum + temp;
arr[j] = sum;
j++;
temp = 0;
sum = 0;
}
else if (str[i] == '+')
{
sum = sum + temp;
temp = 0;
}
else
{
temp = temp * 10;
temp = temp + str[i] - '0';
}
}
result = arr[0];
for (i = 1; i < j; i++)
{
result = result - arr[i];
}
printf("%d", result);
}
https://henrynoh.tistory.com/20
논리는 같다. 목표도 같았다.. int형 배열을 마지막에 계산해주는 방법
반복문을 한개만 사용하고, - +가 아닐 경우 숫자를 쌓는다. 그리고 -+를 보면 쌓은 숫자들을 저장시킨다.
디테일한건 i == len조건인데, 마지막보다 한번 더 돌리면서 끝까지 저장할 수 있다. 이건 디버깅을 해보면 직관적으로 알 수 있다.
#include<stdio.h>
void main(){
int i=0,n,a; char c;
//for문을 이용해 입력 및 조건식 처리
for(scanf("%d",&n);scanf("%c",&c),c!=10;){
//-일때 i=1로 바꿔준다.
if(c=='-') i=1;
scanf("%d",&a);
//i=1일때, 즉, -부호가 최초로 들어왔을 때 n에서 계속 빼준다.
if(i) n-=a;
//i=0, 즉 아직 -부호가 들어오지 않았거나, 처음 입력받았을 땐 n에 입력받은 수를 더해준다.
else n+=a;
}
printf("%d",n);
}
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=occidere&logNo=220833166496
진짜 미친 방법인것같다. for문으로 조건들을 scanf로 받으면서 바로바로 계산을 해준다.
저 for문이 어떤식으로 돌아가는지 자세히는 모르지만, 진짜 미친것 같다..
근데 이 문제가 왜 그리디일까
그냥 문자열문제인것같다..