๐Ÿ“[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ

Chobbyยท2022๋…„ 3์›” 19์ผ
0

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
20/344

ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์€ ์ฒœ์œ ๋ฆฐ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ๋ณด๊ณ  ์ฐธ๊ณ ํ•˜์—ฌ ํ’€์ด๋˜์—ˆ์Œ์„ ๋ฏธ๋ฆฌ ๋ฐํž™๋‹ˆ๋‹ค.

๋ฌธ์ œ ์„ค๋ช…

์•ž๋’ค๋ฅผ ๋’ค์ง‘์–ด๋„ ๋˜‘๊ฐ™์€ ๋ฌธ์ž์—ด์„ ํŒฐ๋ฆฐ๋“œ๋กฌ(palindrome)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, s์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด(Substring)์ค‘ ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๊ธธ์ด๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์˜ˆ๋ฅผ๋“ค๋ฉด, ๋ฌธ์ž์—ด s๊ฐ€ "abcdcba"์ด๋ฉด 7์„ returnํ•˜๊ณ  "abacde"์ด๋ฉด 3์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

๋ฌธ์ž์—ด s์˜ ๊ธธ์ด : 2,500 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜

๋ฌธ์ž์—ด s๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑ

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

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

4๋ฒˆ์งธ์ž๋ฆฌ 'd'๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด s ์ „์ฒด๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋˜๋ฏ€๋กœ 7์„ returnํ•ฉ๋‹ˆ๋‹ค.

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

2๋ฒˆ์งธ์ž๋ฆฌ 'b'๋ฅผ ๊ธฐ์ค€์œผ๋กœ "aba"๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋˜๋ฏ€๋กœ 3์„ returnํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์˜ ํ’€์ด

function solution(s) {
    // ์•ž๋’ค๋กœ ๊ฐ™์€ ์ˆ˜ ๋งŒํผ ์—ฐ์†๋˜๋Š” ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•˜๋Š” ์ฝ”๋“œ
    // ex ) i === 7 ? 'abcdcba'
    // ex ) i === 6 ? 'abcdcb' , 'bcdcb' 
    // ...
    for(let i = s.length ; i > 0 ; i--) {
        for(let j = 0 ; j <= s.length - i ; j ++) {
            if(isPalindrome(s.slice(j,i+j))) return i
        }
    }
    
    function isPalindrome(str) {
        // ์ ˆ๋ฐ˜์„ ๋‚˜๋ˆ„์–ด i ๋ฒˆ์งธ์™€ ๋ฌธ์ž์—ด์˜ ๋์—์„œ i-1 ๋ฒˆ์งธ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ X
        const half = Math.floor(str.length/2)
        for(let i = 0 ; i < half ; i ++) {
            if(str[i] !== str[str.length-i-1]) return false
        }
        return true
    }
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€