[BOJ][๐ŸŸก4][๋ฐฑ์ค€#17255] N์œผ๋กœ ๋งŒ๋“ค๊ธฐ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #17255


๋ฌธ์ œ

์ค€ํ•˜๋Š” ๋…ธํŠธ์— ์ˆ˜๋ฅผ ์ ๋‹ค๊ฐ€ ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฐฉ์‹์„ ๊นจ๋‹ฌ์•˜๋‹ค. ์ฒ˜์Œ์— ์–ด๋–ค ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ์ ๊ณ  ๋งŒ๋“ค์–ด์ง„ ์ˆ˜์˜ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์— ์ˆซ์ž๋ฅผ ๊ณ„์† ๋ถ™์ด๋ฉด ์–ด๋–ค ์ˆ˜ย N์ด๋“  ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด ์–ด๋–ค ์ˆ˜ย N์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์ฒ˜์Œ์— ์–ด๋–ค ์ˆซ์ž๋ฅผ ํ•˜๋‚˜ ์ ๊ณ  ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ํ–‰๋™์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ˆ˜์˜ ์™ผ์ชฝ์— ์ˆซ์ž๋ฅผ ํ•˜๋‚˜ ์ ๋Š”๋‹ค. ์ˆ˜์˜ ์˜ค๋ฅธ์ชฝ์— ์ˆซ์ž๋ฅผ ํ•˜๋‚˜ ์ ๋Š”๋‹ค.

์ค€ํ•˜๋Š” ์–ด๋–ค ์ˆ˜ย N์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐ€์ง€์ธ์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค. ์ด๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด์ฃผ์ž. ์ˆซ์ž๋ฅผ ์ ๋Š” ๊ณผ์ •์—์„œ ๋‚˜์˜จ ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‹จ, ์ˆซ์ž๋ฅผ ์ ๋Š” ๊ณผ์ •์—์„œ ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.


์ž…๋ ฅ

์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ย N์ด ์ฃผ์–ด์ง„๋‹ค. (0 โ‰ค N โ‰ค 10,000,000)


์ถœ๋ ฅ

N์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

521


์ถœ๋ ฅ

4


์˜ˆ์ œ 2

์ž…๋ ฅ

9111


์ถœ๋ ฅ

4


My Sol

def main():
    def dfs(S, l):
        if l == 1: return 1
        if D.get(S, 0): return D[S]

        left_S, right_S = S[1:], S[:-1]
        D[S] = dfs(left_S, l-1)
        if left_S == right_S: return D[S]
        D[S] += dfs(right_S, l-1)
        return D[S]

    S = input()
    l = len(S)
    if l==1: return 1
    D = {}
    dfs(S, l)
    return D[S]

print(main())

DP ๋ฐฉ์‹์„ ์ผ๋ถ€ ์ฐจ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. ํƒ€์ผ ๋งž์ถ”๊ธฐ์ฒ˜๋Ÿผ ์•ž๋’ค๋กœ ์ˆซ์ž๋“ค์„ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ตœ์ดˆ ๋ฐ›์€ ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ณด๋‹ค ๊ธธ์ด๊ฐ€ 1 ์ž‘์€ ์ˆ˜๋กœ๋ถ€ํ„ฐ ๋’ค์— ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๋ถ™์ด๊ฑฐ๋‚˜, ์•ž์— ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ์ˆ˜๋ฅผ ๊นŽ์•„๋‚ด๋ฆฌ๋‹ค๊ฐ€ ํŠน์ • ์ˆ˜์— ๋‹ค๋‹ค๋ฅด๋ฉด, ์ด์ „์— ๋‚˜์™”๋˜ ์ˆ˜์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ ์ˆ˜๋กœ๋ถ€ํ„ฐ ๊นŽ์•„๋‚ด๋ฆฌ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋‹ค์‹œ ํ•ด๋ณด์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ memoizationํ•œ๋‹ค. ๋‹ค๋งŒ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , dictionary์— ์ €์žฅํ–ˆ๋‹ค.

ํ•ด๋‹น ์ˆ˜๊นŒ์ง€ ๋‹ค๋‹ค๋ฅด๋Š” ๊ฒฝ๋กœ๋Š” ์œ ๋‹ˆํฌํ•˜๋‹ค๋Š” ์ „์ œ์ธ๋ฐ, ์ขŒ์ธก๊ณผ ์šฐ์ธก์„ ๊ฐ๊ฐ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ๋”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ขŒ์ธก์˜ ํ•˜๋‚˜, ์šฐ์ธก์˜ ํ•˜๋‚˜๋ฅผ ๋บ€ ์ˆ˜๊ฐ€ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•˜๋ฉด ์ขŒ์ธก๊ณผ ์šฐ์ธก์˜ ์ˆ˜๋ฅผ ๋บ€ ๊ฒƒ์ด ๊ฐ™๋‹ค๋ฉด, ๊ฒฝ๋กœ๊ฐ€ ๊ฐ™์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ด๋‹ค. ๋•Œ๋ฌธ์— ํ•˜๋‚˜๋ฅผ ๋บ€ ๊ฒฝ์šฐ๋งŒ ๊ณ ๋ คํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

์ˆซ์ž๊ฐ€ ํ•œ ์ž๋ฆฌ๋ผ๋ฉด ๋” ๋นผ๊ณ  ๋ถ™์ผ ๊ฒƒ์ด ์—†์œผ๋ฏ€๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜ 1์„ returnํ•˜๊ณ , ๋งŒ์•ฝ dictionary D์— ์žˆ๋Š” ์ˆ˜๋ผ๋ฉด ํ•ด๋‹น ์ˆ˜๊ฐ€ ๊นŽ์•„์ง€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•œ D[S]๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ ์ฒซ ์ˆ˜๊ฐ€ 10์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ทธ๋ƒฅ 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ