GitHubSeob

C++ / 백준 / 10799 / 쇠막대기 본문

Baekjoon/Silver

C++ / 백준 / 10799 / 쇠막대기

GitHubSeob 2022. 3. 13.

문제

https://www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

문제풀이

입력받은 값에서 한자리씩 끊어 확인한다.

pipe는 레이저를 만났을 때 잘려서 나눠진 파이프의 개수, answer는 파이프의 총 개수이다.

idx가 '(' 이고, idx+1가 ')'이라면 answer에 pipe값을 더한다. 그리고 idx에 1을 더해 레이저 다음 부터 다시 확인하도록 한다.

idx가 '(' 이고 idx+1가 '('이라면 pipe 개수를 하나 늘린다.

idx가 ')' 이면 파이프의 끝을 의미하므로 pipe 개수를 하나 빼고, answer의 개수를 1 늘려준다.

 

검은색 = 놓여 있는 파이프, 빨간색 = 이미 자른 파이프 조각 총합

코드

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	string input("");
	cin >> input;
	int pipe(0), idx(0);
	int answer(0);

	for (idx = 0; idx < input.size(); ++idx) {
		if (input[idx] == '(') {
			if (input[idx + 1] == ')') {
				answer += pipe;
				++idx;
			}
			else {
				pipe++;
			}
		}
		else {
			if (pipe > 0)
				pipe--;
			answer += 1;
		}
	}
	cout << answer;
}

 

'Baekjoon > Silver' 카테고리의 다른 글

C++ / 백준 / 2346 / 풍선 터뜨리기  (0) 2022.03.14
C++ / 백준 / 1874 / 스택 수열  (0) 2022.03.14
C++ / 백준 / 1935 / 후위 표기식2  (0) 2022.03.13
C++ / 백준 / 1966 / 프린터 큐  (0) 2022.03.11
C++ / 백준 / 10866 / 덱  (0) 2022.03.07