일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- dropout
- 조합론
- 분할 정복
- BFS
- 우선 순위 큐
- 문자열
- 자바스크립트
- 이분 탐색
- 미래는_현재와_과거로
- tensorflow
- lazy propagation
- c++
- 크루스칼
- 세그먼트 트리
- 가끔은_말로
- 다익스트라
- object detection
- 백트래킹
- DP
- 회고록
- pytorch
- dfs
- 플로이드 와샬
- 가끔은 말로
- 2023
- back propagation
- 너비 우선 탐색
- 알고리즘
- NEXT
- Overfitting
- Today
- Total
Doby's Lab
[자료구조] 백준 5525번: IOIOI (C++), 스택을 이용한 트릭 본문
https://www.acmicpc.net/problem/5525
5525번: IOIOI
N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇
www.acmicpc.net
이번 문제 또한 스택을 사용해야 할 거 같다는 확신이 들었다.
하지만, 스택을 이용해서 트릭을 만들어낼 수 있는 능력이 이번 문제의 포인트다.
솔루션
"IOIOI"라는 문자열에 n이 1이라면 답은 2가 출력되어야 한다.
내가 만든 트릭은 첫 "IOI"가 발생할 때, 이를 스택에 담고 n이 1인 경우를 만족시켰으므로 하나를 count 한 다음에 두 번만 pop 해서 I(문자열 0번 인덱스)를 남겨두고 "OI"를 스택에 집어넣어서 다시 n이 1인 경우를 만족시켜 총 두 번의 count를 하게 한다.
>> 다음 트릭은 단조 스택(monotonic stack)에서 영감을 받았다.
https://draw-code-boy.tistory.com/30?category=962020
[자료구조] 백준 17298번: 오큰수 (C++), Monotonic Stack (단조로운 스택)
(이번 문제는 첫 골드 문제이다 (울컥)) 이번 문제의 유형이 'Monotonic Stack'이라고 하는데 이 유형의 문제를 처음 접한 것은 아니다. 예전 SCPC 준비를 할 때, 같이 준비하던 친구들과 영어 문제를 풀
draw-code-boy.tistory.com
소스 코드
#include <iostream>
#include <stack>
using namespace std;
int n, m;
string idx;
stack<char> s;
int result = 0;
int main() {
cin >> n >> m;
cin >> idx;
for (int i = 0; i < idx.size(); i++) {
if (s.empty() && idx[i] == 'I') {
s.push(idx[i]);
}
else if (!s.empty() && s.top() != idx[i]) {
s.push(idx[i]);
}
else {
while (!s.empty()) {
s.pop();
}
if (idx[i] == 'I') {
s.push(idx[i]);
}
}
if (s.size() == 2 * n + 1) {
result++;
//cout << i << ' ';
s.pop();
s.pop();
}
}
cout << result;
return 0;
}
'PS > BOJ' 카테고리의 다른 글
[알고리즘] 백준 9663번: N-Queen, Backtracking의 대표 문제 (0) | 2021.11.08 |
---|---|
[알고리즘] 백준 4150번: 피보나치 수 (C++), DP인데 배열을 안 쓴다고? (0) | 2021.11.07 |
[알고리즘] 백준 1254번: 팰린드롬 만들기 (C++), 같은 실수 반복하지 않기 (0) | 2021.11.05 |
[알고리즘] 백준 2792번: 보석 상자 (C++), 최솟값과 최댓값의 활용 (1) | 2021.11.03 |
[알고리즘] 백준 14500번: 테트로미노 (C++), 좋은 문제였다 (0) | 2021.11.01 |