๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/ใ„ด problems

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 2020 KAKAO BLIND RECRUITMENT : ๋ฌธ์ž์—ด ์••์ถ•

by vodkassi 2021. 10. 9.
728x90

๐Ÿ“ ๋ฌธ์ œ ์„ค๋ช…

 

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


๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ "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๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 


๐Ÿ“ ์ž…์ถœ๋ ฅ ์˜ˆ

 

s result
"aabbaccc" 7
"ababcdcdababcdcd" 9
"abcabcdede" 8
"abcabcabcabcdededededede" 14
"xababcdcdababcdcd" 17

 


๐Ÿ“ ์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…


์ž…์ถœ๋ ฅ ์˜ˆ #1

๋ฌธ์ž์—ด์„ 1๊ฐœ ๋‹จ์œ„๋กœ ์ž˜๋ผ ์••์ถ•ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์งง์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #2

๋ฌธ์ž์—ด์„ 8๊ฐœ ๋‹จ์œ„๋กœ ์ž˜๋ผ ์••์ถ•ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์งง์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #3

๋ฌธ์ž์—ด์„ 3๊ฐœ ๋‹จ์œ„๋กœ ์ž˜๋ผ ์••์ถ•ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์งง์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #4

๋ฌธ์ž์—ด์„ 2๊ฐœ ๋‹จ์œ„๋กœ ์ž๋ฅด๋ฉด "abcabcabcabc6de" ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด์„ 3๊ฐœ ๋‹จ์œ„๋กœ ์ž๋ฅด๋ฉด "4abcdededededede" ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด์„ 4๊ฐœ ๋‹จ์œ„๋กœ ์ž๋ฅด๋ฉด "abcabcabcabc3dede" ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด์„ 6๊ฐœ ๋‹จ์œ„๋กœ ์ž๋ฅผ ๊ฒฝ์šฐ "2abcabc2dedede"๊ฐ€ ๋˜๋ฉฐ, ์ด๋•Œ์˜ ๊ธธ์ด๊ฐ€ 14๋กœ ๊ฐ€์žฅ ์งง์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #5

๋ฌธ์ž์—ด์€ ์ œ์ผ ์•ž๋ถ€ํ„ฐ ์ •ํ•ด์ง„ ๊ธธ์ด๋งŒํผ ์ž˜๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ x / ababcdcd / ababcdcd ๋กœ ์ž๋ฅด๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ๋„ ์••์ถ•๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์งง์€ ๊ธธ์ด๋Š” 17์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ“ ๋‚˜์˜ ์†”๋ฃจ์…˜

 

function solution(s) { 
    let answer = s.length; 
    const mid = Math.floor(s.length/2); 
    for (let i=1; i<=mid; i++){ 
        let count = 1;
        let result = '';
        let temp = s.substring(i); 
        let zip = s.substring(0, i);
        while (zip) {
            let cur = temp.substring(0, i); 
            if (zip === cur) {
                count += 1;
            } else {
                result += `${count>1?count:''}${zip}`;
                count = 1;
                zip = cur;
            }
            temp = temp.substring(i); 
        } 
        answer = (answer > result.length ? result.length : answer) ;
    }
    return answer;
}

 

๐Ÿ“ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

 

- ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์ด ๋ณต์žกํ•˜๊ฒŒ ๋Š๊ปด์ ธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์ˆ˜๋„์ฝ”๋“œ๋กœ ๋ช…ํ™•ํžˆ ์ •๋ฆฌํ•˜๋‹ˆ ๊ธธ์ด ๋ณด์ด๋Š” ๊ธฐ๋ถ„์ด์—ˆ๋‹ค. ๊ทธ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

1. ์ตœ๋Œ€๋กœ ์••์ถ•๋  ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด: s / 2
2. 1 ~ n ๋‹จ์œ„๋กœ ์••์ถ•ํ•ด๊ฐ€๋ฉฐ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ €์žฅํ•  ๊ณต๊ฐ„ ํ•„์š”
3. n ๋‹จ์œ„๋กœ ๋ฌธ์ž์—ด ๋‚˜๋ˆ„์–ด ๋ณด๊ด€
4. ์ง์ „์— ๋ณด๊ด€ํ–ˆ๋˜ ๋‚ด์šฉ๊ณผ ๊ฐ™๋‹ค๋ฉด count += 1
5. ์ง์ „์— ๋ณด๊ด€ํ–ˆ๋˜ ๋‚ด์šฉ๊ณผ ๋‹ค๋ฅด๋‹ค๋ฉด count + ์ง์ „ ๋ฌธ์ž์—ด, count ๋Š” 1๋กœ ์ดˆ๊ธฐํ™”, ๋ณด๊ด€ํ•œ ๋ฌธ์ž์—ด ์ดˆ๊ธฐํ™”
6. ๋ฌธ์ž์—ด ์••์ถ• ๋๋‚˜๋ฉด ์ €์žฅ์†Œ์— ๊ธธ์ด ๋น„๊ต ํ›„ ๋” ๋‚ฎ์€ ๊ฐ’ ๋ณด๊ด€ 
7. ์ €์žฅ๋œ ๊ธธ์ด ์ค‘ ๊ฐ€์žฅ ์งง์€ ๊ธธ์ด ๋ฐ˜ํ™˜

- ๋ฐ˜๋ณต๋ฌธ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋Œ๋ฆฌ๊ฒŒ ๋  ๊ฒƒ์„ ์˜ˆ์ƒํ•˜๊ณ , ๋ฐ˜๋ณต๋ฌธ์˜ ํšŸ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋– ์˜ฌ๋ฆฐ ๊ฒƒ์ด 1๋ฒˆ์ด์—ˆ๋‹ค. ์–ด์ฐจํ”ผ ๋ชจ๋“  ๋ฌธ์ž์—ด์€ ๋ฌธ์ž์—ด์˜ ์ ˆ๋ฐ˜ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•œ ๊ฐ’์œผ๋กœ๋Š” ์••์ถ•ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์˜ˆ์‹œ: 'abca' ๋Š” ์ตœ๋Œ€ 2๊ฐœ์”ฉ ๋ฌถ์–ด์„œ ์••์ถ•ํ•  ์ˆ˜ ์žˆ์Œ) 

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

๋Œ“๊ธ€