Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- tftp-hpa
- 라즈베리파이 uboot
- uboot
- tftp 서버
- 백준
- 모듈
- 일곱 난쟁이
- 라즈베리파이3
- 라즈베리파이3 라즈비안
- 최단경로
- deque
- 디바이스 드라이버
- 인접행렬
- gui
- putty
- u-boot
- DFS
- 한수
- 디바이스드라이버
- 라즈비안
- stack
- dfs recursive
- .config
- 라즈베리파이3 ftfp
- Module.symvers
- tftp
- STL deque
- AWS
- 2309
- GPIO
Archives
- Today
- Total
달공이와 임베디드
[백준][10799] 쇠막대기 본문
본 문제는 "(" 와 ")" 로 표현되는 쇠막대기의 수를 구하는 문제이다.
이런 류의 문제를 풀 때면 종종 실수하는 것이 있다.
왜 그렇게 되는지 증명하려 한다는 것.
왜 "(", ")" 의 표현만으로 잘라진 쇠막대기의 수를 모두 나타낼 수 있는지를 생각한다는 점이다.
뭐 번쩍이는 두뇌로 1:1 매핑되는 것을 순간적으로 알아차릴 수 있다면 말리지 않겠지만,
그냥 1:1 매핑이 된다고 가정하고 문제로 넘어가는 것이 상책이다.
그 가정 하에서 1:1 매핑되는 공식만 알아차리면 된다.
공식은 다음과 같다.
※ stack 부분 (state update)
"( )" 이면, stack pass, "(" 이면, stack +1, ")" 이면, stack -1
※ calculate 부분
"( )" 이면, stack size 만큼 cnt 증가, "(" 이면 calcuate pass, ")" 이면, cnt +1
이를 구현하면 다음과 같다.
스택은 STL deque로 구현하였다.
#include <iostream>
#include <deque>
using namespace std;
deque<int> st;
#define input_size 100000 + 1
char input[100000 + 1];
int main()
{
int cnt = 0;
cin >> input;
//cout << "input: " << input << endl;;
for (int i=0; i<input_size-1 && input[i] != '\0'; )
{
//cout << "pos: " << i << endl;
char cur = input[i];
char next = input[i+1];
// "( )" case
if ((cur == '(') && (next == ')'))
{
// stack : pass
// calculate
cnt = cnt + st.size();
i = i + 2;
}
// "(" case
if ((cur == '(') && (next != ')'))
{
// stack : +1
st.push_back(1);
// calculate : pass
i = i + 1;
}
// ")" case
if (cur == ')')
{
// stack : -1
st.pop_back();
// calculate :
cnt = cnt + 1;
i = i + 1;
}
}
cout << cnt << endl;
}
'알고리즘' 카테고리의 다른 글
[백준][3986] 좋은 단어 (0) | 2020.05.19 |
---|---|
[백준][1065] 한수 (0) | 2020.05.09 |
[C++ 자료구조] STL deque 사용 예제 (0) | 2020.05.09 |
[C++ 자료구조] unordered_map (0) | 2020.05.07 |
[C++ 자료구조] STL deque (0) | 2020.05.07 |
Comments