ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] 2020 ์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ ๋ฆฌํฌ๋ฃจํŒ… ๊ด„ํ˜ธ ๋ณ€ํ™˜
    Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ/others 2020. 7. 3. 00:58

    ๋ฌธ์ œ ์„ค๋ช…

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

    ์ˆ˜์ •ํ•ด์•ผ ํ•  ์†Œ์Šค ํŒŒ์ผ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ณ ๋ฏผํ•˜๋˜ ์ฝ˜์€ ์†Œ์Šค ์ฝ”๋“œ์— ์ž‘์„ฑ๋œ ๋ชจ๋“  ๊ด„ํ˜ธ๋ฅผ ๋ฝ‘์•„์„œ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋œ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์„ ์•Œ๋ ค์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

     

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

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

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

    ์˜ˆ๋ฅผ ๋“ค์–ด, "(()))("์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ด์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์€ ์•„๋‹™๋‹ˆ๋‹ค.

    ๋ฐ˜๋ฉด์— "(())()"์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ด๋ฉด์„œ ๋™์‹œ์— ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ž…๋‹ˆ๋‹ค.

    '(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด 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 ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

     

    ๋‚˜๋Š” ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋‚˜

    import java.util.Stack;
    import java.lang.StringBuilder;
    
    class Solution {
        public String solution(String p) {
            String answer = p;
            
            if(!isCorrectParen(p)) {
                answer = toCorrectParen(p);
            }
            
            return answer;
        }
        
        public String toCorrectParen(String w) {
            String u, v = "";
            String correctParen = "";
            
            if(w.equals("")) return "";
            
            // split u and v
            String[] wArr = w.split("");
            int mark = 0, balanceIndicator = 0;
            
            while(mark < wArr.length) {
                if(wArr[mark].equals("(")) balanceIndicator++;
                if(wArr[mark].equals(")")) balanceIndicator--;
                mark++;
                
                if(balanceIndicator == 0) break;
            }
            
            u = w.substring(0, mark);
            v = w.substring(mark);
                    
            if(isCorrectParen(u)) { // phase 3
                return u + toCorrectParen(v);
            } 
            else { //phase 4
                StringBuilder sbd = new StringBuilder();
                sbd.append("(");
                sbd.append(toCorrectParen(v));
                sbd.append(")");
                
                String[] uArr = u.split("");
                for(int i = 1; i < uArr.length - 1; i++) {
                    switch(uArr[i]) {
                        case "(":
                            sbd.append(")");
                            break;
                        case ")":
                            sbd.append("(");
                            break;
                    }
                }
                
               correctParen += sbd.toString();
            }
        
            return correctParen;
        }
        
        public boolean isCorrectParen(String p) {
            String[] parenArr = p.split("");
            Stack<String> parens = new Stack<>();
            
            for(String paren : parenArr) {
                if(paren.equals("(")) parens.push(paren);
                if(paren.equals(")")) {
                    if(parens.isEmpty()) return false;
                    parens.pop();
                }
            }
            
            return parens.isEmpty();
        }
    }

     

    ๋‚˜๋Š” ์™œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‚˜

    ๋งจ ์ฒ˜์Œ  '๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด'์ธ์ง€ ํŒŒ์•…ํ•ด์•ผ ํ•˜๋Š”๋ฐ DS์‹œ๊ฐ„์— ๋ฐฐ์šด ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ƒ๊ฐ๋‚˜ ๊ทธ ๋ฐฉ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋ฌธ์ œ์—์„œ ์•Œ๋ ค์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

     

    ๊ทธ ์ค‘ u์™€ v๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ถ€๋ถ„์ด ์–ด๋ ค์› ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„๋งŒ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค.

    u๋Š” ๋” ์ด์ƒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” '๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด'์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์™„์„ฑ๋˜๋ฉด ์•Œ๋ ค์ค„ ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” balanceIndicator๋ผ๋Š” intํ˜• ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค. ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ (๊ฐ€ ๋‚˜์˜ค๋ฉด increment๋ฅผ, )๊ฐ€ ๋‚˜์˜ค๋ฉด decrement๋ฅผ ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  balanceIndicator๊ฐ€ 0์ด ๋˜๋ฉด ๊ทธ๊ฒƒ์€ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์™„์„ฑ๋˜์—ˆ๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ์„ ๋‚˜๊ฐ„ ๋’ค ๋‚˜๊ฐ„ ๊ทธ index๋ฅผ ๊ธฐ์ค€์œผ๋กœ u์™€ v๋ฅผ ๋‚˜๋ˆด๋‹ค.

     

    ์ฒ˜์Œ์— u์™€ v๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ถ€๋ถ„์„ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ ํ•œ์ฐธ ํ—ค๋งธ๋Š”๋ฐ ์ œ๋Œ€๋กœ ๋ฌธ์ œ๋ฅผ ์ดํ•ด์‹œ์ผœ์ค€ ๊ฐ“์œ ์ง„์—๊ฒŒ ์ •๋ง์ •๋ง ๊ฐ์‚ฌํ•˜๋‹ค.๐Ÿ˜ญ

     

    ๋‚˜๋Š” ๋ฌด์—‡์„ ๋ฐฐ์› ๋‚˜

    ๋ฌธ์ œ๋ฅผ ๊ผผ๊ผผ์ด ์ฝ์–ด๋ณด์ž ์ œ๋ฐœ ใ… ใ… 

    ๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ์œผ๋กœ StringBuilder๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๋ณด๊ธฐ ์ข‹๋‹ค. ์•ž์œผ๋กœ ์• ์šฉํ•ด์•ผ๊ฒ ๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.