[์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„] ์นด์นด์˜ค 2020 Recruitment ๋ฌธ์ œ :: ๊ด„ํ˜ธ ๋ณ€ํ™˜

๊ด„ํ˜ธ ๋ณ€ํ™˜

๋ฌธ์ œ

programmers.co.kr/learn/courses/30/lessons/60058

๋ฌธ์ œ ์„ค๋ช…

์นด์นด์˜ค์— ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ ์ž…์‚ฌํ•œ ์ฝ˜์€ ์„ ๋ฐฐ ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ์—ญ๋Ÿ‰ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋ผ๋Š” ์—…๋ฌด ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋ณด๋‹ˆ ๋Œ€๋ถ€๋ถ„ ์†Œ์Šค ์ฝ”๋“œ ๋‚ด ์ž‘์„ฑ๋œ ๊ด„ํ˜ธ๊ฐ€ ๊ฐœ์ˆ˜๋Š” ๋งž์ง€๋งŒ ์ง์ด ๋งž์ง€ ์•Š์€ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ˆ˜์ •ํ•ด์•ผ ํ•  ์†Œ์Šค ํŒŒ์ผ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ณ ๋ฏผํ•˜๋˜ ์ฝ˜์€ ์†Œ์Šค ์ฝ”๋“œ์— ์ž‘์„ฑ๋œ ๋ชจ๋“  ๊ด„ํ˜ธ๋ฅผ ๋ฝ‘์•„์„œ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋œ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์„ ์•Œ๋ ค์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์šฉ์–ด์˜ ์ •์˜

'(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์žˆ์„ ๊ฒฝ์šฐ, '(' ์˜ ๊ฐœ์ˆ˜์™€ ')' ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ด๋ฅผ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— '('์™€ ')'์˜ ๊ด„ํ˜ธ์˜ ์ง๋„ ๋ชจ๋‘ ๋งž์„ ๊ฒฝ์šฐ์—๋Š” ์ด๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, "(()))("์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ด์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์€ ์•„๋‹™๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด์— "(())()"์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ด๋ฉด์„œ ๋™์‹œ์— ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ž…๋‹ˆ๋‹ค.

'(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด w๊ฐ€ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ด๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ž…๋ ฅ์ด ๋นˆ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ, ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
2. ๋ฌธ์ž์—ด w๋ฅผ ๋‘ "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, u๋Š” "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"๋กœ ๋” ์ด์ƒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•˜๋ฉฐ, v๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
3. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" ์ด๋ผ๋ฉด ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 
  3-1. ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ u์— ์ด์–ด ๋ถ™์ธ ํ›„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
4. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"์ด ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ž˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 
  4-1. ๋นˆ ๋ฌธ์ž์—ด์— ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ '('๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. 
  4-2. ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค. 
  4-3. ')'๋ฅผ ๋‹ค์‹œ ๋ถ™์ž…๋‹ˆ๋‹ค. 
  4-4. u์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด์„œ ๋’ค์— ๋ถ™์ž…๋‹ˆ๋‹ค. 
  4-5. ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด p๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•ด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค๋ช…

  • p๋Š” '(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด๋ฉฐ ๊ธธ์ด๋Š” 2 ์ด์ƒ 1,000 ์ดํ•˜์ธ ์ง์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด p๋ฅผ ์ด๋ฃจ๋Š” '(' ์™€ ')' ์˜ ๊ฐœ์ˆ˜๋Š” ํ•ญ์ƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ p๊ฐ€ ์ด๋ฏธ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด ๊ทธ๋Œ€๋กœ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ

#include <string>
#include <vector>

using namespace std;

int findUV(string& str){
    int left = 0; int right = 0;
    for(int i=0; i<str.length(); i++){
        if(str[i]=='(')
            left++;
        else
            right++;
        if(left==right){
            // u์กฐ๊ฑด : ์ตœ์†Œ(์ฒ˜์Œ์œผ)๋กœ ์™„์„ฑ๋˜๋Š” ๊ท ํ˜• ๋ฌธ์ž์—ด 
            return left+right;
        }
    }
    return -1;
}

bool isRightStr(string& str){
    int num=0;
    for(int i=0; i<str.length(); i++){
        if(str[i]=='(')
            num++;
        else
            num--;
        if(num<0){
            return false;
        }
    }
    if(num==0)
        return true;
    else
        return false;
}

string moduleFunction(string str){
    if(str=="")
        return str;

    string u, v;
    int idx = findUV(str);
    /*
    if(idx==-1){
        // ์—๋Ÿฌ, u๊ฐ€ ์—†์Œ
    }*/
    if(idx!=str.length()){
        u = str.substr(0,idx); 
        v = str.substr(idx,str.length());
    }
    else{
        u= str.substr(0,str.length()); v=""; // ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ฒจ์•ผ ํ•จ
    }

    if(isRightStr(u)){
        return u+moduleFunction(v);
    }else{
        string tmp = "(";
        tmp+=moduleFunction(v);
        tmp+=")";
        for(int i=1; i<u.length()-1; i++){ // ์•ž๋’ค ๋ฌธ์ž ์ œ๊ฑฐ
            if(u[i]=='(')
                tmp+=")";
            else
                tmp+="(";
        }
        return tmp;
    }
}

string solution(string p) {
    string answer = "";
    if(isRightStr(p))
        return p;

    answer = moduleFunction(p);

    return answer;
}

 

์ฃผ์˜

  • u์กฐ๊ฑด์„ ์ž˜ ํ•ด์„ํ•ด์•ผํ•œ๋‹ค. (์ตœ์†Œ์˜ ๊ท ํ˜•์žกํžŒ ๋ฌธ์ž์—ด)
  • u=str ์ฒ˜๋Ÿผ ๋„ฃ์–ด๋ฒ„๋ฆฌ๋ฉด ์ฃผ์†Œ๊ฐ€ ๋ณต์‚ฌ๋˜๋ฏ€๋กœ, u=str.substr(0)๋กœ ๋ณต์‚ฌ๋˜๊ฒŒ ํ•œ๋‹ค.
  • ๋ฌธ์ œ๋งŒ ์ž˜ ์ฝ๊ณ  ๋˜‘๊ฐ™์ด ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

 

๊ฒฐ๊ณผ

ํ’€์ด

๋ฌธ์ œ๋ž‘ ๋˜‘๊ฐ™์ด ํ’€์—ˆ๊ณ , ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋ผ๊ณ ๋Š” ์ตœ์ดˆ์— "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"์ด๋ฉด ๋ฐ”๋กœ return ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

  • substr ์‚ฌ์šฉ๋ฒ•์„ ์ž˜ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์ž.
  • for(char ch : str) ๋ฌธ๋ฒ•์ด ๊ฐ„๋ฃŒํ•˜๋‹ค.
๋ฐ˜์‘ํ˜•