앗! 광고가 차단되었어요!

글 내용이 방문자께 도움이 되었다면, 광고 차단 프로그램 해제를 고려해주세요 😀.

알고리즘 노트

1541번: 잃어버린 괄호

this-gpa 2020. 11. 27. 17:13

오늘 문제 1541번은 보통 난이도를 가진 그리디 알고리즘 문제이다.

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문제를 접근하는 방법은 간단하다.

처음 "-"의 위치를 기준으로, 이전에 나타나는 숫자는 더하고, 이후에 나타나는 숫자는 빼면 된다.

 

다만 C++ 구현에서 입력을 어떻게 처리해야 할지에 대해 고민하는데 시간이 많이 소요됐다.

scanf로 전체 스트링을 받는 다음 strtok를 이용하는 방법, 또는 stringstream, sprintf를 활용하는 방법을 생각했지만 코드가 복잡해졌다.

 

결론적으로 (타 소스를 살펴본 결과,) 단순히 C로 쉽게 처리할 수 있었다.

  • tmp라는 임시 변수를 준비한다. 0으로 초기화한다.
  • 숫자를 만나면 tmp = tmp * 10 + (숫자) 를 수행한다.
  • '+' 또는 '-' 또는 '\n' 을 만났을 경우 tmp를 정답 변수에 더하거나 뺀다. tmp 값을 0으로 설정한다.
  • '-' 를 한번 이상 읽은 상태라면 정답 변수에서 뺀다.