'코딩테스트/카카오 코딩테스트' 카테고리의 글 목록 :: 잡다한 프로그래밍
반응형

https://programmers.co.kr/learn/challenges?tab=all_challenges

 

프로그래밍 강의 | 프로그래머스

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

1. 해결방법

stack을 활용하여 올바른 괄호 문자열인지 확인하고, 나머지는 문제에서 제시한 방법대로 재귀함수를 진행한다


2. 코드

#include <string>
#include <string.h>
#include <vector>
#include <stack>
#include <iostream>
using namespace std;
    string answer = "";

bool check(string p){
    stack<char> st;
    for(int i = 0; i < p.length(); i++){
        if(!st.empty() && p[i] == ')'){
            if(st.top() == '(') {
                st.pop();
            }else {st.push(p[i]);} 
        }else {st.push(p[i]);}
    }

    if(st.empty()) return 1;
    else return 0;
}

string check_function(string p){
    if(p == "") return "";
    string u = "";
    string v = "";
    int left = 0;
    int right = 0;
    
    if(check(p)) {return p;}
    else{
        for(int i = 0; i < p.length(); i++){
            if(p[i] == '(') left++;
            else right++;
            if(left == right) {
                u = p.substr(0,left+right);
                v = p.substr(left+right, p.length());
                
                if(check(u)){ 
                    return u + check_function(v);
                }else{
                    string temp;
                    temp += "(";
                    temp += check_function(v);
                    temp += ")";
                    string temp2 = u.substr(1, u.length()-2);
                    for(int j = 0; j < temp2.length(); j++){
                        if(temp2[j] == '(') temp += ")";
                        else temp += "(";
                    }
                    return temp;
                }
                
            }
            
        }
    }
}

string solution(string p) {
    if(p == "") return "";
    answer = check_function(p);
    return answer;
}
반응형
반응형

 

https://programmers.co.kr/learn/challenges?tab=all_challenges

 

프로그래밍 강의 | 프로그래머스

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

1. 해결방법

문제에서 제시한 개수만큼 글자를 자르고 이전과 다음으로 저장하여 비교하는 방식을 사용하였다.


2. 코드

#include <iostream>
#include <string>
#include <vector>

using namespace std;
int answer = 9999;
void check(int num, string s){
    int mok;
    if(s.length() % num == 0) mok = s.length() / num;
    else mok = s.length() / num + 1;
    string result = "";
    int check = 1;
    string pre; string next;
    for(int i = 0; i < mok-1; i++){
        pre = s.substr(i*num, num);
        next = s.substr((i+1) * num , num);
        
        if(pre == next) check++;
        else{
            if(check != 1) result += to_string(check) + pre;
            else result += pre;
            check = 1;
        }
    }
    if(check == 1) result += next;
    else result += to_string(check) + pre;
    if(result.length() < answer) answer = result.length();
    
}

int solution(string s) {
                answer = 9999;

    for(int i = 1; i <= s.length()-1; i++){
        check(i, s);
    }
    if(s.length() == 1) answer = 1;
        return answer;
}
반응형

+ Recent posts