티스토리 뷰

 

#include <stdio.h>

int main(void)
{
	int num[50] = {0};
 	int f[50] = {0};
 
	int i = 0, j = 0;
	int cnt = 0;
	char s = getchar(); //문자 형식으로 입력 받은 후 키보드 buffer에서 한 개씩 꺼냄
	while(1==1) 
	{
		static int tmp = 0; //부분합
		if(s == '\n') //줄바꿈 문자가 나오면 종료
       	 { num[i++] = tmp; //종료전까지 있던 수를 저장
			break; }
		
		if(s == '+' || s == '-') //기호
		{
			num[i++] = tmp; //그 전까지의 수 저장
			f[j++] = s; //기호 저장
			cnt = 0; //자릿수 초기화
			tmp = 0; //부분합 초기화
		} else {
			if(cnt == 0) {//1 자릿수
				tmp = s-48;
				cnt++; //자릿수 증가
			}
			else { //2 자릿수 이상
				tmp *= 10;
				tmp += s - 48;
			}
		}
		s = getchar(); //하나씩 입력 buffer에서 가져오기
	}
	
	int sum = 0; //최솟값을 담을 변수
	int n = i;
	for(i = 0; i<n; i++)
	{
		static int sw = 0; //'-'가 있으면 계속 1로 존재
		if(sw == 0) sum += num[i]; //'-'가 안 뜨는 경우 더해주고,
		else sum -= num[i]; //'-'가 한 번이라도 나왔다면, 다 빼준다.
	
		if(f[i] == '-' && i<n-1) sw = 1; //'-'일 경우 sw = 0 -> sw = 1
	}
	
	printf("%d", sum);
	return 0;
}

 

풀이

 

1) 문자 형식으로 입력을 받은 뒤, 숫자 따로, 문자 따로 저장한다.

2) 괄호을 사용해도 되기 때문에, '-'가 순간부터, 그 이후의 숫자들은 음수로 바뀐다.

ex) 10 + 20 - 30 + 40 + 50 

=> 10 + 20 -(30 + 40 + 50)

ex) 10 + 20 - 30 - 40 + 50

=> 10 + 20 -30 -(40 + 50)

즉 '-'가 나오기 전까지는 계속 더해주다가, 나온 순간 부터, 그 이후의 숫자들은 음수로 변환 후 더해주면 된다.

 

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함