본문 바로가기

BOJ/C++

[BOJ] 16638. 괄호 추가하기2

*괄호 추가하기1에서 연산자 우선순위만 추가 (계산 단계 하나만 추가됐다)

*숫자 자리수를 계산하기 번거로와서 string으로 처리함 

2019/10/08 - [BOJ/C++] - [BOJ] 괄호추가하기

 

[BOJ] 괄호추가하기

문제 길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순서대..

jayrightthere.tistory.com

*단계

1) 괄호 추가 (addd)

- added[i] = true 인 부분은 괄호에 속하는 숫자들이다. 

- 괄호 안에 연산자는 하나만 들어갈 수 있기 때문에 연산자를 기준으로 i와 i+2를 검사한다. 

 

2) added[i] == false라면 괄호 안에 있는 숫자 혹은 연산자가 아니기 때문에 후에 계산을 진행해야 한다. 

res 라는 string 백터에 넣는다. 

added[i] == true라면 계산을 진행한 후 결과값을 res에 넣는다. 

 

3) 이 단계가 왔다면 res에는 

(3+8) * (7-9) * 2  =>res = [ 11, *, -2, *, 2] 이 저장되어있을 것이다. 

 

연산자 우선순위에 따라서 *는 먼저 계산이 되어야 한다. 

스택의 특성을 이용해서 '*' 연산자가 나오면 가장 위에 있는 숫자와 계산한 값을 넣어주고, 숫자 혹은 '+', '-' 라면 바로 넣어준다. 

 

4) 마지막으로 스택에 남은 숫자들을 연산자에 따라 저장 

 

5) 다시 addd() 로 되돌아와서 최대값 계산 

 

 

'BOJ > C++' 카테고리의 다른 글

[BOJ] 9376. 탈옥  (0) 2020.03.18
[BOJ] 12094. 2048(Hard)  (0) 2020.03.18
[BOJ] 16988. Baaaaaaaaaduk2 (Easy)  (0) 2020.03.16
[BOJ] 10711. 모래성  (0) 2020.03.15
[BOJ] 5557. 1학년  (0) 2020.03.14