본문 바로가기

Algorithm/Code Fights (Code Signal)

Aracade Intro #13 ReverseParentheses, Codefights, CodeSignal, 코드파이트, 알고리즘, algorithm

Aracade Intro #13 ReverseParentheses, Codefights, CodeSignal, 코드파이트, 알고리즘, algorithm




이거 진짜 재귀로 풀기 젼나 빡쎘슴..


It was hella hard to solve using recursive..




Q. 

You have a string s that consists of English letters, punctuation marks, whitespace characters, and brackets. It is guaranteed that the parentheses in s form a regular bracket sequence.

Your task is to reverse the strings contained in each pair of matching parentheses, starting from the innermost pair. The results string should not contain any parentheses.


입력받는 s 스트링이 있는데, 영어글자, 괄호, 스페이스 이런걸로 채워져있는데 가장 안쪽의 괄호에서부터 뒤집어서 중복되면 또 뒤집고, 뒤집고 암튼 괄호 싹 없애서 마지막 문자를 출력해봐라.



e.g. 



1.

Input ---- s: "The ((quick (brown) (fox) jumps over the lazy) dog)"


Output   -----     "The god quick nworb xof jumps over the lazy"



2.

Input ---- s: "co(de(fight)s)"


Output   -----     "cosfighted"




Process

//1. Input string

//2. Iterate from begin to the end

// 2.1. If it's not a parentheses -> Add to returnString

// 2.2. If it's parentheses

//  2.2.1. Bind all till close parentheses, remain i

//  2.2.2. Reverse that

//  2.2.3. Call recursive function with reversed word

//  2.2.4. Save the result of recursive function

//3. Finish?



처리과정

//1. string을 입력받는다.

//2. 시작부터 끝까지 반복한다.

// 2.1. 괄호가 아니면 글자를 출력글자에 저장한다.

// 2.2. 괄호이면

//  2.2.1. 그 해당괄호의 닫는 괄호까지 글자들을 묶는다. 묶으면서 i 넘겨놓는다.

//  2.2.2. 묶은 글자들을 뒤집는다.

//  2.2.3. 뒤집은걸 넣어서 재귀함수를 호출한다.

//  2.2.4. 재귀함수 결과물을 출력글자에 저장한다.

//3. 끝낸다?




code

코드.. 코드를 보자!



It's been a long time ago solving this.. so i just adjust some.. and post it

푼지 오래돼서 기억 안나고 걍 대충 코드 정리만 해서 올림




std::string reverseInParentheses(std::string s) {


    std::string answer;


    int length = s.size();


    for (int i = 0; i < length; ++i) 

    {

        if (s.at(i) != '(' && s.at(i) != ')') 

        {

            answer.push_back(s.at(i));

        }

        else // 괄호이면 if it's parentheses

        { 

            int pCount = 1;

            bool isDone = false;

            int j = i + 1;

            std::string tempString;


            while (isDone == false)  // 해당괄호까지 묶는다 bind till parentheses

            {

                if (s.at(j) == '(' || s.at(j) == ')') 

                {

                    if (s.at(i) == s.at(j)) 

                    {

                        ++pCount;

                        tempString.push_back(s.at(j));

                    }

                    else 

                    {

                        if (pCount == 1) 

                        {

                            isDone = true;

                        }

                        else 

                        {

                            pCount--;

                            tempString.push_back(s.at(j));

                        }

                    }

                }

                else {

                    tempString.push_back(s.at(j));

                }

                ++j;

            }


            i = j - 1; // i 넘겨준다


            std::string reverseTempString;


            int tempLength = tempString.size();


            for (int j = 0; j < tempLength; ++j)  // 뒤집는다 Reverse

            {

                reverseTempString.push_back(tempString.back());

                tempString.pop_back();

            }


            // 재귀함수 recursive function


            std::string returnString = reverseInParentheses(reverseTempString);


            int returnLength = returnString.size();


            for (int j = 0; j < returnLength; ++j) // 재귀결과물 출력문자에 저장 Save recursive return

            {    

                answer.push_back(returnString.at(j));

            }

        }

    }

    return answer;

}





Something else..




2019/01/12 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #60 sudoku. Algorithm,알고리즘,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive

2019/01/12 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #59 spiralNumbers. Algorithm,알고리즘,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive

2019/01/08 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #58 messageFromBinaryCode. Algorithm,알고리즘,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive

2019/01/07 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #57 fileNaming. Algorithm,알고리즘,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive

2019/01/04 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #56 digitsProduct. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제,문제해결능력,example, c++ java c# scalar

2019/01/04 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #55 differentSquares. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제,문제해결능력,example, c++ java c# scalar

2019/01/02 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #54 sumUpNumbers. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제,문제해결능력,example, c++ java c# scalar



2019/01/24 - [Algorithm/Leet Code] - LeetCode #242 ValidAnagram. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접

2019/01/23 - [Algorithm/Leet Code] - LeetCode #225 ImplementStackUsingQueue. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접

2019/01/22 - [Algorithm/Leet Code] - LeetCode #220 ContainsDuplicate3. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접

2019/01/21 - [Algorithm/Leet Code] - LeetCode #219 ContainsDuplicate2. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접

2019/01/16 - [Algorithm/Leet Code] - LeetCode #217 ContainsDuplicate. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접



2019/01/29 - [Programming/Programming Language] - 클린코딩/더 나은 코딩을 하는 10가지 방법, 10 Tips for clean code/ better code/ quality code.


2019/01/30 - [Programming/Software Architecture] - What is Object Oriented Design/Artchitecture? 객체지향 디자인/설계란? java,c++,softwareArchitecture,designPattern