BOJ : 10799 쇠막대기 (C++)
문제
Code
- '(' 일때는 stack에 push
- ')' 일때
1) 바로 직전이 '(' --> (레이저임) +stack.size()
2) 바로 직전이 '('가 아니면 --> +1
[ 최적 코드 ]
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void)
{
int sum = 0;
stack<char> S;
string s;
cin >> s;
for(int i=0;i<s.size();i++)
{
if (s[i] == '(')
S.push('(');
else
{
S.pop();
if (s[i - 1] == '(')
{
sum += S.size();
}
else
{
sum += 1;
}
}
}
cout << sum;
}
[ 다르게 푼 코드 ]
#include <iostream>
#include <stack>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
stack<char> s;
string str;
int cur_cnt=0, tot_cnt=0,flag=0;
cin >> str;
for(int i=0; i< str.length();i++)
{
char a = str[i];
if( a == '('){
cur_cnt++;
if(s.empty()){
flag=1;
}else{
flag=0;
}
s.push(a);
}else if( a==')'){
cur_cnt--;
if(s.size() == 1){
if(flag == 0){
tot_cnt ++;
}else{
flag=0;
}
}
else{
if(str[i-1] == ')')
tot_cnt++;
else
tot_cnt += cur_cnt;
}
s.pop();
}
}
cout << tot_cnt;
}
- 증가 경우를 잘못 파악해서 돌아서 코딩함; 이런ㅎㅎ;
Author And Source
이 문제에 관하여(BOJ : 10799 쇠막대기 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/BOJ-10799-쇠막대기-C
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- '(' 일때는 stack에 push
- ')' 일때
1) 바로 직전이 '(' --> (레이저임)+stack.size()
2) 바로 직전이 '('가 아니면 -->+1
[ 최적 코드 ]
#include <iostream> #include <stack> #include <string> using namespace std; int main(void) { int sum = 0; stack<char> S; string s; cin >> s; for(int i=0;i<s.size();i++) { if (s[i] == '(') S.push('('); else { S.pop(); if (s[i - 1] == '(') { sum += S.size(); } else { sum += 1; } } } cout << sum; }
[ 다르게 푼 코드 ]
#include <iostream> #include <stack> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); stack<char> s; string str; int cur_cnt=0, tot_cnt=0,flag=0; cin >> str; for(int i=0; i< str.length();i++) { char a = str[i]; if( a == '('){ cur_cnt++; if(s.empty()){ flag=1; }else{ flag=0; } s.push(a); }else if( a==')'){ cur_cnt--; if(s.size() == 1){ if(flag == 0){ tot_cnt ++; }else{ flag=0; } } else{ if(str[i-1] == ')') tot_cnt++; else tot_cnt += cur_cnt; } s.pop(); } } cout << tot_cnt; }
- 증가 경우를 잘못 파악해서 돌아서 코딩함; 이런ㅎㅎ;
Author And Source
이 문제에 관하여(BOJ : 10799 쇠막대기 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/BOJ-10799-쇠막대기-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)