Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 생활코딩
- XSS Game
- 숙명여자대학교 정보보안동아리
- hackerrank
- Sookmyung Information Security Study
- 파이썬
- C언어
- 백준
- 자료구조 복습
- Python
- 웹페이지 만들기
- CSS
- c++
- PHP 웹페이지 만들기
- WarGame
- hackctf
- Javascript
- BOJ Python
- HTML
- c
- BOJ
- siss
- lob
- 숙명여자대학교 정보보안 동아리
- 기계학습
- 풀이
- SWEA
- 드림핵
- The Loard of BOF
- 머신러닝
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 10799번: 쇠막대기 본문
CODE
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int sum = 0;
string str;
stack<int> pipe;
cin >> str;
for(int i=0; i<str.length(); i++){
if(str[i] == '(') pipe.push(str[i]);
else{
pipe.pop();
if(str[i-1] == '(') sum += pipe.size();
else sum++;
}
}
cout << sum;
return 0;
}
문제 풀이
[문제 조건]
1. 레이저는 여는 괄호와 닫는 괄호의 인접한 쌍 '()'으로 표현된다. 또한, 모든 '()'는 반드시 레이저를 표현한다.
2. 쇠막대기의 왼쪽 끝은 여는 괄호 '('로, 오른쪽 끝은 닫힌 괄호 ')'로 표현된다.
예를 통해 어떤식으로 코드를 작성할 수 있을지 생각해보자.
먼저 레이저가 나오면, 지금까지 자른 파이프의 개수를 더해줘야 한다. 이때 지금까지 자른 파이프의 개수는 왼쪽 괄호 '('와 같다고 볼 수 있다. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않기 때문에 레이저가 지나가면 반드시 잘린 막대기가 생길 것이기 때문이다.
그렇다면 레이저는 어떻게 구분할 수 있을까? 레이저는 반드시 '()' 형식이기 때문에 바로 앞이 왼쪽 괄호 '('인지 확인하면 된다. 만약 오른쪽 괄호 ')'가 나온다면 그것은 쇠막대기의 끝이므로 +1을 하여 잘려나온 막대에 1개를 더해주면 된다.
결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 10026번: 적록색약 (0) | 2022.10.05 |
---|---|
[BOJ_C++] 3986번: 좋은 단어 (0) | 2022.09.30 |
[BOJ_C++] 2493번: 탑 (0) | 2022.09.29 |
[BOJ_C++] 11003번: 최솟값 찾기 (0) | 2022.09.28 |
[BOJ_C++] 5430번 : AC (0) | 2022.09.28 |