https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
걸린 시간 : 6분 18초
어렵지 않았고, 발상도 쉬웠다. 문자열에서 문자를 처리하면서 발생할 수 있는 경우만 처리해주면 됐다.
스택을 사용할 수도 있지만, 그냥 변수를 사용해도 충분하다.
- 문자가 ( 이면 현재 막대기의 수를 나타내는 barnum을 증가시킨다.
- 문자가 ) 이면 다음 둘 중 하나이다.
- 직전 문자가 ( 이면 레이저를 나타낸다. 현재 막대기의 수만큼 잘린 막대기가 생길 것이다. 단, () 자체가 레이저인데 직전 문자인 ( 에서 barnum을 증가시켰으므로 먼저 barnum을 다시 감소시켜야 한다.
- 직전 문자가 ( 가 아니면 막대의 끝을 나타낸다. 막대 하나가 생기는 것으로 볼 수 있으므로 ans를 증가시킨다. 막대 하나가 끝났으므로 barnum도 감소시킨다.
#include <bits/stdc++.h> using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); string bar; cin >> bar; int barnum = 0, ans = 0; for (int i = 0; i < bar.size(); i++) { if (bar[i] == '(') { barnum++; } else { barnum--; if (bar[i-1] == '(') { ans += barnum; } else { ans++; } } } ans += barnum; cout << ans; return 0; }
'Baekjoon Online Judge' 카테고리의 다른 글
[BOJ] 2644: 촌수계산 (C++) (0) | 2023.08.06 |
---|---|
[BOJ] 4963 : 섬의 개수 (C++) with DFS (0) | 2023.08.06 |
[BOJ] 14500 : 테트로미노 (JAVA) with DFS (0) | 2023.08.03 |
[BOJ] 1941: 소문난 칠공주 (C++) with 조합 (0) | 2023.08.03 |
[BOJ] 2170 : 선 긋기 (C++) (0) | 2023.08.03 |