일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 힙덤프
- 스택
- List
- JPA
- 큐
- BFS
- alter
- 리소스모니터링
- dfs
- 스프링부트
- GC로그수집
- Union-find
- CSS
- Calendar
- scanner
- javascript
- html
- math
- deque
- priority_queue
- map
- union_find
- NIO
- string
- sql
- Java
- spring boot
- Properties
- date
- set
- Today
- Total
목록스택 (3)
매일 조금씩
스택과 큐를 활용한 문제이다. 여러가지 예외만 잘처리해주면 쉬운 문제였다. 중요 포인트 실행 중간에 불가능이 나오면 "NO"만 출력해야한다. 결과를 한번에 출력해야하는데 역순 출력이 아니므로 stack이 아닌 queue에 출력할 연산들을 담는다. push되는 숫자는 1부터 오름차순이고, pop된 숫자는 다시 push 안됨. (push 되는 숫자를 따로 두지 않고 stack의 용량과 같은 값으로 두면 에러가남) 여기선 num으로 둔다. s.top()과 inp을 비교햇을 때, top이 더 크면 불가능 (pop은 입력된 숫자와 같은 숫자만 가능하기때문) s.top()이 inp값보다 작을 땐, 같거나 커질 때 까지 push(num) 해주는데 그때마다 num++; 한다. 5번에서 크면 불가능, 같으면 pop한다...
스택관련 문제로 반례를 잘 찾아야하는 문제다. 열린 괄호와 닫힌 괄호가 만나게 되면 열린괄호를 pop한다. '(' 다음에는 ')', '[' 다음에는 ']' 가 와야한다. 예를 들어 "( [ ) ]"는 성립 될 수 없다. 닫는 괄호가 들어올 때 비어있거나, top이 짝이 맞는 열린괄호가 아닐 경우 불균형이다. 열린 괄호만 남아있게 되어도 불균형이다. 괄호가 아무것도 입력안되면 균형으로 간주한다. #include #include #include using namespace std; string str; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0);//cin 실행속도 향상 while (1) { getline(cin, str); if ..
스택을 활용한 문제다. 라인 코테를 보기전에 스택을 공부했다면... 이문제를 풀었다면.... 얼마나 좋았을까... YES가 나와야 하는데 NO만 나오는 오류가 발생했다. 문제는 stack s; 를 for문 밖에 선언해서 그런거였다. 한줄 한줄 새로운 괄호의 testcase를 받을때마다 새로운 stack을 사용해야하므로 for문 안에 선언 해주어야한다. #include #include #include using namespace std; int n; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0);//cin 실행속도 향상 cin >> n; for (int i = 0; i > str; ..