새소식

백준(BOJ)

[백준]10799번 쇠막대기 C++

  • -
반응형

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

 

알고리즘 분류

자료구조
스택

 


Hint

 

굳이 STL stack 을 사용하지 않아도

Stack 논리를 활용하여 풀 수 있습니다

 


Solution

 

) 나왔을 때

직전에 ( 나오면 자르기 -> 스택에서 -1 그리고 스택 내 남은 아이템 개수만큼 카운트 +

직전에 ) 나오면 -> 스택에서 -1 카운트 +1

( 나오면 스택에 +1

Stack: 1

예제1)
3+3+1+3+1+2+1+1+1+1
= 17

 

 

#include <iostream>
#include <cstring>

using namespace std;
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);
	int stack_size = 0; // 실제 스택을 구현할 필요는 없으므로 stack_size를 int형으로 구현
	char ch[100001]; // 문자열 받기
	long long int count = 0; // 총 개수
	cin >> ch;
	int ch_len = strlen(ch); // cstring 필요

	stack_size++; // 첫 입력은 '(' 임이 확정

	for (int i = 1; i < ch_len; i++) {
		if (ch[i] == '(') {
			stack_size++;
		}
		else { // ')'이 입력
			if (ch[i-1] == '(') { // 이전 입력이 '('
				stack_size--;
				count += stack_size;
			}
			else { // 이전 입력이 ')'
				stack_size--;
				count++;
			}
		}
	}
	std::cout << count;
}

알고리즘 자체는 어렵지 않은데

입출력의 문제가 좀 까다로운 편입니다

반응형

'백준(BOJ)' 카테고리의 다른 글

[백준] 5525번 IOIOI C++  (1) 2024.01.25
[백준] 1107번 리모컨 C++  (0) 2024.01.18
[백준] 30022번 행사 준비 C++  (0) 2023.09.30
[백준] 30024번 옥수수밭 C++  (0) 2023.09.29
[백준] 11403번 경로 찾기 C++  (0) 2023.07.05
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.