ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] 2020 ์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ ๋ฆฌํฌ๋ฃจํŒ… ๋ฌธ์ž์—ด ์••์ถ•
    Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ/others 2020. 7. 3. 01:14

    ๋ฌธ์ œ ์„ค๋ช…

    ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ „๋ฌธ๊ฐ€๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ์–ดํ”ผ์น˜๋Š” ๋ฌธ์ž์—ด์„ ์••์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ๋น„์†์‹ค ์••์ถ• ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋ฌธ์ž์—ด์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—ฐ์†ํ•ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๊ทธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜์™€ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋” ์งง์€ ๋ฌธ์ž์—ด๋กœ ์ค„์—ฌ์„œ ํ‘œํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ aabbaccc์˜ ๊ฒฝ์šฐ 2a2ba3c(๋ฌธ์ž๊ฐ€ ๋ฐ˜๋ณต๋˜์ง€ ์•Š์•„ ํ•œ๋ฒˆ๋งŒ ๋‚˜ํƒ€๋‚œ ๊ฒฝ์šฐ 1์€ ์ƒ๋žตํ•จ)์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๊ฐ€ ์ ์€ ๊ฒฝ์šฐ ์••์ถ•๋ฅ ์ด ๋‚ฎ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, abcabcdede์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ์ „ํ˜€ ์••์ถ•๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ดํ”ผ์น˜๋Š” ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด์„ 1๊ฐœ ์ด์ƒ์˜ ๋‹จ์œ„๋กœ ์ž˜๋ผ์„œ ์••์ถ•ํ•˜์—ฌ ๋” ์งง์€ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ababcdcdababcdcd์˜ ๊ฒฝ์šฐ ๋ฌธ์ž๋ฅผ 1๊ฐœ ๋‹จ์œ„๋กœ ์ž๋ฅด๋ฉด ์ „ํ˜€ ์••์ถ•๋˜์ง€ ์•Š์ง€๋งŒ, 2๊ฐœ ๋‹จ์œ„๋กœ ์ž˜๋ผ์„œ ์••์ถ•ํ•œ๋‹ค๋ฉด 2ab2cd2ab2cd๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ 8๊ฐœ ๋‹จ์œ„๋กœ ์ž˜๋ผ์„œ ์••์ถ•ํ•œ๋‹ค๋ฉด 2ababcdcd๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ๊ฐ€ ๊ฐ€์žฅ ์งง๊ฒŒ ์••์ถ•ํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

    ๋‹ค๋ฅธ ์˜ˆ๋กœ, abcabcdede์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, ๋ฌธ์ž๋ฅผ 2๊ฐœ ๋‹จ์œ„๋กœ ์ž˜๋ผ์„œ ์••์ถ•ํ•˜๋ฉด abcabc2de๊ฐ€ ๋˜์ง€๋งŒ, 3๊ฐœ ๋‹จ์œ„๋กœ ์ž๋ฅธ๋‹ค๋ฉด 2abcdede๊ฐ€ ๋˜์–ด 3๊ฐœ ๋‹จ์œ„๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์••์ถ• ๋ฐฉ๋ฒ•์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ 3๊ฐœ ๋‹จ์œ„๋กœ ์ž๋ฅด๊ณ  ๋งˆ์ง€๋ง‰์— ๋‚จ๋Š” ๋ฌธ์ž์—ด์€ ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    ์••์ถ•ํ•  ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์œ„์— ์„ค๋ช…ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ 1๊ฐœ ์ด์ƒ ๋‹จ์œ„๋กœ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ ์••์ถ•ํ•˜์—ฌ ํ‘œํ˜„ํ•œ ๋ฌธ์ž์—ด ์ค‘ ๊ฐ€์žฅ ์งง์€ ๊ฒƒ์˜ ๊ธธ์ด๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

     

    ์ œํ•œ์‚ฌํ•ญ

    • s์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

    • s๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

     

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

    public class Solution {
        public int solution(String s) {
            int len = s.length();
            int minLen = (len == 1) ? len : Integer.MAX_VALUE;
            
            for(int unit = 1; unit <= len / 2; unit++) {
                String compStr = "";
                
                String targetStr = s.substring(0, unit);
                int numContinuous = 1;
                int remainMark = 0;
                boolean isLeftToComp = false;
                
                for(int i = unit; i <= len; i+= unit) {
                	if(i + unit > len) break;
                	
                    String otherStr = s.substring(i, i + unit);
                    
                    if(targetStr.equals(otherStr)) {
                        numContinuous++;
                        isLeftToComp = true;
                    }
                    else {
                        compStr += (numContinuous > 1) ? numContinuous + targetStr : targetStr;
                        
                        if((i + unit) + unit > len) compStr += otherStr; // ๋งˆ์ง€๋ง‰์— ๋ถ™์—ฌ์•ผ ํ•  ๊ฒƒ ์ฒ˜๋ฆฌ 
                        
                        isLeftToComp = false;
                        targetStr = otherStr;
                        numContinuous = 1;
                    }
                    
                    remainMark = i + unit;
                }
                
                // ์••์ถ•ํ•ด์•ผ ํ•  ๋‚˜๋จธ์ง€ ์ฒ˜๋ฆฌ 
                if(isLeftToComp) {
                	compStr += (numContinuous > 1) ? numContinuous + targetStr : targetStr; 
                }
                
                // ๋‚˜๋จธ์ง€ ์ฒ˜๋ฆฌ 
                if(remainMark < len) {
                    compStr += s.substring(remainMark);
                }
                
                minLen = (compStr.length() > minLen) ? minLen : compStr.length();
            }
            
            return minLen;
        }
    }

     

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

    ์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋Š” ์ฝ”๋“œ๊ฐ€ ์ข€ ๋”๋Ÿฝ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ต์‹ฌ๋งŒ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค! ํ˜น์‹œ ๋ˆ„๊ตฐ๊ฐ€ ์ด ๊ธ€์„ ์ฝ๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด ์Šค์Šค๋กœ ์‘์šฉํ•ด๋ณด์‹œ๊ธธ!

     

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

     

    ๋‚˜์ค‘์— ์œ ์ง„์ด๊ฐ€ ์•Œ๋ ค์คฌ๋Š”๋ฐ ๋‹จ์œ„๊ฐ€ ๋ฌธ์ž์—ด ๊ธธ์ด์˜ ์ ˆ๋ฐ˜ ์ด์ƒ์ผ ๊ฒฝ์šฐ๋Š” ์••์ถ•๋œ ๊ฒƒ๋“ค์ด ๋˜‘๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋ณผ ํ•„์š”์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์คฌ๋‹ค! ๋Œ€-๋ฐ• ๐Ÿคฉ ์—ญ์‹œ ๊ฐ“์œ ์ง„์ด๋‹ค์–ด์จŒ๋“  ๊ทธ ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ•œ ๋’ค ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋‹ˆ ์ €๋ ‡๊ฒŒ ๋‚˜์™”๋‹ค.

     

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

    ์™„์ „ ํƒ์ƒ‰ ๋ฌธ์ œ๊ฐ€ ์ด๋ ‡๊ฒŒ ์–ด๋ ค์šธ์ˆ˜๋„ ์žˆ๊ตฌ๋‚˜๋ผ๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.

    ๋ถ„๋ช…ํžˆ ์ด ์ฝ”๋“œ๋ฅผ ํด๋ฆญํ•˜๊ฒŒ ์ง  ์‚ฌ๋žŒ์ด ์žˆ์„ํ…๋ฐ ์•„์ง๊นŒ์ง€๋Š” ํ™•์ธํ•˜์ง€ ๋ชป ํ–ˆ๋‹ค. ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.