[C++] 1541번: 잃어버린 괄호

2023. 10. 15. 00:51·[게임 개발] 알고리즘 공부/백준

링크

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문제

입출력 예제

코드

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(void)
{
	string inputStr = "";
	string num = "";

	int answer = 0;

	bool isMinus = false ;

	cin >> inputStr;

	for (int i = 0; i < inputStr.size(); i++)
	{
		// 기호가 검출 되었을 경우
		if (inputStr[i] == '-' || inputStr[i] == '+')
		{
			if (isMinus)
			{
				answer -= stoi(num);
				num = "";
			}
			else if (!isMinus)
			{
				answer += stoi(num);
				num = "";
			}

			// 마이너스가 한번이라도 나왔다면 이후 모든 수의 합을 음수로 바꿀 수 있음
			if (inputStr[i] == '-')	isMinus = true;
		}

		// 숫자가 검출 되었을 경우
		else
		{
			num += inputStr[i];
		}
	}

	// 반복문 종료 후 남은 숫자 처리
	if (isMinus)
	{
		answer -= stoi(num);
	}
	else if (!isMinus)
	{
		answer += stoi(num);
	}

	cout << answer;

	return 0;
}

풀이

값의 최소를 구해야 하고, 괄호를 원하는대로 칠 수 있습니다.

이는 마이너스 기호가 한번이라도 등장한다면 마이너스 이후의 모든 덧셈 결과들을 음수로 바꿀 수 있다는 뜻입니다.

 

해당 내용을 코드로 다음과 같이 구현했습니다.

 

1. for문을 이용해 input으로 받은 식의 각 인덱스를 모두 탐색한다.

 

2. 숫자가 등장한다면 string 자료형인 num 변수에 해당 숫자를 문자열로 쌓아줍니다.

 

3. '-' 기호가 등장했다면 isMinus를 true로 바꿔줍니다. 
이후 num에 저장되어 있는 문자열을 stoi를 이용해 int형으로 변환하여 answer에 더해줍니다.

만약 isMinus가 true라면 answer에서 해당 수를 빼 줍니다.
이후 num 변수를 초기화합니다.

 

4. '+'기호가 나왔다면 isMinus의 값에 따라 true면 num의 수를 answer에 더해주고, false라면 빼 줍니다.
num 변수를 초기화 하는 과정도 진행해 줍니다.

 

5. for문이 끝났다면 num에 남아있는 수를 isMinus의 값에 따라 answer에 더하거나 빼 줍니다.

 

6. 결과값을 출력합니다.

 

다음과 같은 과정을 통해

 

55-50+40

의 예시의 경우 55 -(50 + 40) 과 같이 마이너스 기호 이후의 모든 수의 합을 음수로 바꿔줄 수 있습니다.

저작자표시 (새창열림)

'[게임 개발] 알고리즘 공부 > 백준' 카테고리의 다른 글

[C++] [실버 1] 9009번: 피보나치  (1) 2023.10.15
[C++] 16953번: A -> B  (0) 2023.10.15
[C++] 5568번: 카드 놓기  (0) 2023.08.13
[C++] 1182번: 부분수열의 합  (0) 2023.08.12
[C++] 1120번: 문자열  (0) 2023.08.10
'[게임 개발] 알고리즘 공부/백준' 카테고리의 다른 글
  • [C++] [실버 1] 9009번: 피보나치
  • [C++] 16953번: A -> B
  • [C++] 5568번: 카드 놓기
  • [C++] 1182번: 부분수열의 합
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      문자열
      스레드
      데드락
      context switching
      투포인터
      메모리구조
      dfs
      프로세스
      우선순위 큐
      슬라이딩 윈도우
      누적합
      dp
      해시
      참조자
      그리디
      역참조
      브루트포스
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    [C++] 1541번: 잃어버린 괄호
    상단으로

    티스토리툴바