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

2021. 5. 27. 22:32ใ†๐Ÿ”ฑ Algorithm

๋ฌธ์ œ ํ•ด๊ฒฐ ํฌ์ธํŠธ

1. s[::-1], ํŒŒ์ด์ฌ์˜ ๋ฌธ์ž์—ด ์—ญ์ „ ๋ฉ”์„œ๋“œ

2. for ๋ฌธ ๋ฒ”์œ„์žก๊ธฐ

 

 

์ •๋‹ต ์ฝ”๋“œ

def palindrome(s):
    if len(s) < 2 or s == s[::-1]:
        return True

def solution(s):

    if len(s) < 2 or s == s[::-1]:
        return len(s)

    for cur in range(len(s), 0, -1):
        for start in range(len(s)):
            currS = s[start: start + cur]
            if palindrome(currS):
                # result.append(len(s[start: start + cur]))
                return len(currS)
            if start + cur > len(s):
                break

 

 

์ ‘๊ทผ ๊ณผ์ •

palindrome() ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ธ์ž๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•˜์—ฌ true๋ฉด ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

s[0] == s[-1]  ์กฐ๊ฑด์ด ๋งž์„ ๋•Œ s[1:-1] ๋กœ ์Šฌ๋ผ์ด์‹ฑํ•˜์—ฌ, ๋‹ค์‹œ palindrome() ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„ฃ๋Š” ์žฌ๊ท€๋ฐฉ๋ฒ•์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฃผ์„ ์นœ ๋ถ€๋ถ„์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์งฐ์ง€๋งŒ, ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

def palindrome(s):
    if len(s) < 2 or s == s[::-1]:
        return True

    # ์™„๋ฒฝํ•œ ๋กœ์ง ๊ฐ™์•˜์ง€๋งŒ, ์‹ค์€ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋งŒ ๋Š˜๋ ค๊ฐ”๋‹ค.
    # if s[0] == s[-1]:
    #     return palindrome(s[1:-1])

 

 

ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ๋ ์ž๋ฆฌ ๊ธ€์ž๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์žฌ๊ท€๋ฅผ ์น˜๊ธฐ์—” ์‹œ๊ฐ„๋ณต์žก๋„์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

palindrome()์— ์ฒ˜์Œ ๋“ค์–ด์˜ค๋Š” ๋ฌธ์ž์—ด s๊ฐ€ palindrome ํ•œ์ง€ ๊ณง ๋ฐ”๋กœ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์žฌ๊ท€ ๋Œ€์‹ )

ํŒŒ์ด์ฌ์˜ ๋งค์ง ๋ฉ”์†Œ๋“œ s[::-1]์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ๋ฌธ์ž์—ด๊ณผ ๋’ค์ง‘์–ด์ง„ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜์—ฌ True์ผ ๋•Œ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด palindrome()์œผ๋กœ ๋˜์งˆ ์ธ์ž s๋Š” ์–ด๋–ป๊ฒŒ ์ •ํ•˜๊ฒŒ ๋˜๋Š” ๊ฑธ๊นŒ์š”?

๋จผ์ € ์ด์ค‘ for ๋ฌธ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ์ชฝ for๋ฌธ์—์„œ start ๋ณ€์ˆ˜๋กœ, ๋ฌธ์ž์—ด s์˜ ์‹œ์ž‘์ ์„ ์ง€์ •ํ•˜๊ณ , 

๋ฐ”๊นฅ for๋ฌธ์—์„œ๋Š” cur ๋ณ€์ˆ˜๋กœ, ๋ฌธ์ž์—ด s์˜ ๋์ง€์ (๋ฒ”์œ„)๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋•Œ start + cur ์˜ ๋ฒ”์œ„๊ฐ€ ์ธ๋ฑ์Šค ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒฝ์šฐ breakํ•˜์—ฌ start ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

cur ๋ณ€์ˆ˜๋Š” ๋ฌธ์ž์—ด s์˜ ๊ธธ์ด len(s)๋กœ ์‹œ์ž‘ํ•˜์—ฌ 1๊นŒ์ง€ ๋‚ด๋ ค๊ฐ‘๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— palindrome() ํ•จ์ˆ˜์—์„œ true๋กœ ๋ฆฌํ„ด๋˜๋Š” ๋ฌธ์ž์—ด์ด, ๊ณง ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋ฉ๋‹ˆ๋‹ค.

def solution(s):

    if len(s) < 2 or s == s[::-1]:
        return len(s)

    for cur in range(len(s), 0, -1):
        for start in range(len(s)):
            currS = s[start: start + cur]
            if palindrome(currS):
                # result.append(len(s[start: start + cur]))
                return len(currS)
            if start + cur > len(s):
                break