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

2022. 1. 20. 23:39·PS(Problem Solving)/C++

문제 링크

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

 

문제 정보

입력

한 줄에 쇠막대기와 레이저의 배치를 나타내는 괄호 표현이 공백없이 주어진다. 괄호 문자의 개수는 최대 100,000이다. 

출력

잘려진 조각의 총 개수를 나타내는 정수를 한 줄에 출력한다.

 

풀이

 생각이 어려웠고 구현은 쉬웠던 문제였다. 여는 괄호는 스택에 push 해주고 닫는 괄호일 때 바로 앞에 괄호가 여는 괄호인지, 닫는 괄호인지를 통해 레이저와 쇠 막대기의 끝을 구별하면 된다.

 

소스 코드

#include <bits/stdc++.h>
using namespace std;

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	string str;
	cin >> str;
	
	stack<char> S;
	
	int ans = 0;
	for (int i = 0; i < str.length(); i++) {
		if (str[i] == '(') { // 여는 괄호
			S.push(str[i]);
		} else { // 닫는 괄호
			if (str[i - 1] == '(') { // 레이저일 경우
				S.pop(); // 쇠 막대기로 착각하고 앞에서 스택에 여는 괄호를 하나 추가했으므로 pop 한다.
				ans += S.size(); // 쇠 막대기의 개수만큼 조각이 잘린다. 
			} else { // 쇠 막대기의 끝일 경우
				S.pop(); // 막대가 끝났으므로 막대기 하나 제거(여는 괄호 제거)
				ans++; // 쇠 막대기의 끝(오른쪽) 조각을 더해준다.
			}
		}
	}
	
	cout << ans;
	
	return 0;
}

 

저작자표시 비영리 변경금지 (새창열림)
'PS(Problem Solving)/C++' 카테고리의 다른 글
  • [백준(BOJ) 1926번] 그림 (C++)
  • [백준(BOJ) 2504번] 괄호의 값 (C++)
  • [백준(BOJ) 9012번] 괄호 (C++)
  • [백준(BOJ) 3986번] 좋은 단어 (C++)
SiwonHae
SiwonHae
프로그래밍을 공부하고 있는 학생입니다.
  • SiwonHae
    시원해의 블로그
    SiwonHae
  • 전체
    오늘
    어제
    • 전체보기 (150)
      • PS(Problem Solving) (95)
        • C (25)
        • C++ (33)
        • JAVA (37)
      • Algorithm & Data Structure (13)
      • Computer Science (12)
        • Network (2)
        • Design Pattern (10)
      • Back-end (6)
        • Spring (5)
      • Front-end (1)
        • React (1)
      • JAVA (4)
      • 정보처리기사 (17)
      • SQLD (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
SiwonHae
[백준(BOJ) 10799번] 쇠막대기 (C++)
상단으로

티스토리툴바