관리 메뉴

너와 나의 스토리

(BOJ) 2800 괄호 제거 본문

Algorithm/기타

(BOJ) 2800 괄호 제거

노는게제일좋아! 2019. 3. 6. 00:15
반응형

문제: https://www.acmicpc.net/problem/2800



문제 풀이:


<main>

- 스택을 이용해서 괄호 위치 쌍으로 저장

  1. 입력받은 문자열을 처음부터 보면서 '('이 나오면 stack에 그 위치 push

  2. ')'이 나오면 stack.top()과 현재 위치를 (pos)벡터에 따로 저장하고 stack.pop()


<function>

- 재귀함수 이용해서 어떤 괄호를 지울지 지정 

  1. 비트 마스크로 지울 괄호 번호 표시 (괄호 번호=위의 2번에서 벡터 번호)

  2. 어떤 괄호를 지울지 다 정했으면 그 괄호들의 위치를 priority_queue에 넣는다 

  3. 입력받은 문자열을 임시 변수에 옮기면서 priority_queue.top() (지울 괄호 중 가장 먼저 나오는 것)은 패스하고 저장

  4. 옮겨진 임시 변수 값을 res라는 벡터에 저장


<main>

- res 벡터 sort

- 순서대로 출력하되 중복되는 문자열이 존재할 수 있으므로 전에 출력한 문자열과 같으면 출력하지 않고 패스


* 중복되는 문자열이 존재하는 이유

어떤 식을 여러 쌍의 괄호가 감쌀 수 있다.

즉, ((0)) 꼴도 가능하다.

위 같은 경우 괄호의 위치를 저장 할 때 (0,4)와 (1,3)이 저장된다.

(0,4)만 지우는 경우와 (1,3)만 지우는 경우의 결과가 동일하다.

 

-> 이거 안 읽어서 틀림..... 문제를 잘 읽도록 하자!



소스코드:


반응형

'Algorithm > 기타' 카테고리의 다른 글

(BOJ) 16988 Baaaaaaaaaduk2 (Easy)  (0) 2019.03.07
(BOJ) 16987 계란으로 계란치기  (1) 2019.03.07
(BOJ) 10815 숫자 카드  (0) 2019.02.26
(BOJ) 13460 구슬 탈출 2  (0) 2019.02.24
(BOJ) 2573 빙산  (0) 2019.02.24
Comments