728x90
[c++] 백준 10799 : 쇠막대기
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
접근
1. (은 막대가 하나씩 쌓인다고 생각한다. 스택에 값을 push한다.
2. )가 올 때, 스택 맨위에 (가 있을 경우에는 레이저로 취급된다. 이때 스택에 있는 (의 개수 만큼 막대 개수가 추가된다. size() 메서드를 이용한다.
3. 그냥 )가 오는 경우 막대 개수가 하나만 추가된다.
또한, 입력받은 문자열의 특정 인덱스에서 )가 나타날 때 그 앞 인덱스의 값이 (이라면 레이저이고, 아니면 막대인 경우로 구분해야 한다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
string stick;
int cnt = 0;
getline(cin, stick);
stack<int> S;
for (int i = 0; i < stick.length(); i++) { // 레이저의 경우
if (stick[i] == ')' && stick[i-1] == '(') {
S.pop();
cnt += S.size();
}
else if (stick[i] == '(') { // 쇠막대기 쌓기
S.push('(');
}
else { // 막대 끝의 경우
S.pop();
cnt += 1;
}
}
cout << cnt;
return 0;
}
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[c++] 백준 1620 : 나는야 포켓몬 마스터 이다솜 (0) | 2023.04.02 |
---|---|
[c++] 백준 2504 : 괄호의 값 (0) | 2023.04.01 |
[파이썬] 백준 3020 : 개똥벌레 (0) | 2023.01.01 |
[파이썬] 백준 11721 열 개씩 끊어 출력하기 (0) | 2022.12.24 |
[python] 백준 1783 : 병든 나이트(자세한 풀이) (1) | 2022.05.13 |