안녕하세요! 테크지니어22입니다.
오늘은 프로그래머스 알고리즘 - 괄호 변환을 풀어보도록 하겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 접근]
문제가 길어서 읽으면서 머릿 속에 막 들어오지 않아서 최대한 적으면서 조건들을 분기화하면서 읽었습니다.
이해가 안되는 부분들은 예제들을 보면서 최대한 이해하려고 했습니다. 문제는 재귀함수가 가미된 단순 구현문제였습니다.
아래처럼 적으면서 읽었습니다.
[풀이 전략]
위에 작성한 문제 접근방법을 아래와 같이 조금 더 단순화 시킨 후 바로 구현을 했습니다.
[코드]
#include <string>
#include <vector>
using namespace std;
bool isGoodBracket(string s) {
int val = 0 ;
for(auto c: s){
if(c == '(') val++;
else if(c ==')') val--;
if (val < 0) return false ;
}
return true ;
}
string func(string s){
if(s == "") return ""; // 빈문자열이면 빈문자열 반환
string u = "";
string v = "";
//문자열 분리.
// ( -> +1 ,, ) -> -1 ;
int val = 0 ;
for(int i = 0 ; i < s.length();i++){
if(s[i] == '(') val++;
else if(s[i] ==')') val--;
if(val == 0) {
u = s.substr(0,i+1);
v = s.substr(i+1,s.length()-u.length());
break;
}
}
if(isGoodBracket(u)) { // u가 올바른 문자열이면
auto r = func(v);
return u+r ;
}
else { // u가 올바른 문자열이 아니라면
string tmpstr = "(";
tmpstr += func(v);
tmpstr += ")";
u = u.substr(1,u.length()-2);
for(auto &c :u) {
if(c == '(') c = ')';
else if(c == ')') c = '(';
}
tmpstr += u ;
return tmpstr ;
}
}
string solution(string p) {
return func(p);
}
[배울 점]
- 문제 읽으면서 호기심과 인내심, 풀수 있다는 마인드를 가지고 읽기.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/C++] 알고리즘 - 오픈 채팅방 (0) | 2024.07.14 |
---|---|
[프로그래머스/C++] 알고리즘 - 문자열 압축 (0) | 2024.07.13 |
[프로그래머스/C++] 알고리즘 - 메뉴 리뉴얼 (0) | 2024.05.25 |
[프로그래머스/C++] 알고리즘 - 주차 요금 계산 (0) | 2024.05.23 |
[프로그래머스/C++] 알고리즘 - 양궁대회 (0) | 2024.05.23 |