Mini
[틀림] 프로그래머스 괄호변환 // 문자열 substr, 재귀, 시키는대로 본문
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
* 시도
문제를 예시로 이해하려고 시도 -> 실패
시키는대로만 하면 되는문제..
알고리즘이 주어진것을 코드로 옮기는 능력을 보고싶은듯
* 풀이
분리불가 && 균형잡힌 문자열 찾는방법?
substr 사용법
잘못 : substr( a, b) 가 a부터 b까지 X
a부터 b개를 가져오는것임
substr(a) // a부터 끝까지
substr(a,3) // a부터 3개
앞뒤를 자르려면?
u = substr(1, u.size()-2)
괄호 방향을 뒤집어서 뒤에 붙이기
reverse를 사용하면 안됨.
괄호 각각을 뒤집어야함!
// reverse(u.begin(),u.end());
string res="";
for(int i=0;i<u.size();++i){
if(u[i]=='(') res+=")";
else res+="(";
}
전체코드
가끔은 시키는대로만 하는 문제도 나올수 있다(?)
#include <bits/stdc++.h>
using namespace std;
// 올바른 괄호문자열인가?
// 균형은 앞의 for문에서 보장됨
int check(string str){
stack<char> stk;
for(int i=0;i<str.size();++i) {
if(str[i]=='('){
stk.push('(');
}
else if (stk.size() && str[i]==')'){
stk.pop();
}
}
if(stk.size()) return 0;
return 1;
}
string go(string w){
if(w=="") return "";
int cnt1=0; int cnt2=0;
int i=0;
for(;i<w.size();++i){
if(w[i]=='(') cnt1++;
else cnt2++;
if(cnt1==cnt2){
break;
}
}
//u는 분리불가 && 균형잡힌 문자열 보장
string u = w.substr(0,i+1);
string v = w.substr(i+1,w.size());
// cout<<u<<"\n"<<v;
if(check(u)){
return u + go(v);
}
else{
string s = "(" + go(v) + ")";
u = u.substr(1,u.size()-2); //substr(1,2) : 1부터 시작해서 "2개" 가져오기!!
// reverse(u.begin(),u.end());
string res="";
for(int i=0;i<u.size();++i){
if(u[i]=='(') res+=")";
else res+="(";
}
s = s + res;
return s;
}
return "";
}
string solution(string p) {
return go(p);
}
'Algorithm > 문자열' 카테고리의 다른 글
[틀림] 프로그래머스 문자열 압축 // 문자열, 구현 (0) | 2025.03.12 |
---|---|
[알고리즘] 백준 15353 큰수 // 문자열, 덧셈 (0) | 2025.01.19 |
프로그래머스 k진수에서 소수개수구하기 c++ //core dumped 해결방법, 소수판별알고리즘, k진법 변환 알고리즘 (0) | 2023.12.08 |
프로그래머스 숫자문자열과영단어 c++ // 문자열, regex_replace 사용법 (0) | 2023.11.21 |