Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 1309. ๋™๋ฌผ์›

deo2kim 2020. 8. 28. 08:11
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

1. S1 | DP

2. ์‚ฌ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์‚ฌ์ž๊ฐ€ ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ, ์‚ฌ์ž๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

3. i๋ฒˆ์งธ์—์„œ i-1๋ฒˆ์งธ์— ์‚ฌ์ž์˜ ์ƒํƒœ์— ๋”ฐ๋ผ i๋ฒˆ์งธ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

 (1) i๋ฒˆ์งธ์— ์‚ฌ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” i-1๋ฒˆ์งธ์— ์‚ฌ์ž๊ฐ€ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆฌ๊ณ  ์—†์–ด๋„ ๋œ๋‹ค.

 (2) i๋ฒˆ์งธ์— ์‚ฌ์ž๊ฐ€ ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” i-1๋ฒˆ์งธ์— ์‚ฌ์ž๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ์—†๋Š” ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 (i-1๋ฒˆ์งธ์— ์™ผ์ชฝ์— ์žˆ์œผ๋ฉด i๋ฒˆ์งธ์—์„œ๋Š” ์™ผ์ชฝ์— ์žˆ์„ ์ˆ˜ ์—†๋‹ค)

 (3) ์˜ค๋ฅธ์ชฝ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€

4. ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ ์ฐจ ๋”ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ๋งˆ์ง€๋ง‰ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๋”ํ•ด์ค€๋‹ค.

 

๐Ÿ’จ ๋งˆ์ง€๋ง‰์—๋งŒ 9901๋กœ ๋‚˜๋ˆ„๋ ค๊ณ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ฐ’์„ ์Œ“์„ ๋•Œ ๋ถ€ํ„ฐ ๋‚˜๋ˆ ์ฃผ๋ฉด์„œ ํ•˜์ž.

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

if __name__ == "__main__":
    N = int(input())
    dp_no_lion = [0]*(N+1)  # ์‚ฌ์ž๊ฐ€ ์—†์„ ๋•Œ
    dp_left_lion = [0]*(N+1)  # ์™ผ์ชฝ์— ์‚ฌ์ž๊ฐ€ ์žˆ์„ ๋–„
    dp_right_lion = [0]*(N+1)  # ์˜ค๋ฅธ์ชฝ์— ์‚ฌ์ž๊ฐ€ ์žˆ์„ ๋•Œ

    dp_no_lion[0] = 1
    for i in range(1, N+1):
        dp_no_lion[i] = (dp_no_lion[i-1] + dp_left_lion[i-1] + dp_right_lion[i-1]) % 9901
        dp_left_lion[i] = (dp_no_lion[i-1] + dp_right_lion[i-1]) % 9901
        dp_right_lion[i] = (dp_no_lion[i-1] + dp_left_lion[i-1]) % 9901

    answer = dp_no_lion[N] + dp_left_lion[N] + dp_right_lion[N]
    print(answer % 9901)
    

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/1309

 

1309๋ฒˆ: ๋™๋ฌผ์›

์ฒซ์งธ ์ค„์— ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


๋ฌธ์ œ

์–ด๋–ค ๋™๋ฌผ์›์— ๊ฐ€๋กœ๋กœ ๋‘์นธ ์„ธ๋กœ๋กœ N์นธ์ธ ์•„๋ž˜์™€ ๊ฐ™์€ ์šฐ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

์ด ๋™๋ฌผ์›์—๋Š” ์‚ฌ์ž๋“ค์ด ์‚ด๊ณ  ์žˆ๋Š”๋ฐ ์‚ฌ์ž๋“ค์„ ์šฐ๋ฆฌ์— ๊ฐ€๋‘˜ ๋•Œ, ๊ฐ€๋กœ๋กœ๋„ ์„ธ๋กœ๋กœ๋„ ๋ถ™์–ด ์žˆ๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด ๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ๋Š” ์‚ฌ์ž๋“ค์˜ ๋ฐฐ์น˜ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ณจ๋จธ๋ฆฌ๋ฅผ ์•“๊ณ  ์žˆ๋‹ค.

๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ์˜ ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”„์ง€ ์•Š๋„๋ก ์šฐ๋ฆฌ๊ฐ€ 2*N ๋ฐฐ์—ด์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐ€์ง€์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ์ฃผ๋„๋ก ํ•˜์ž. ์‚ฌ์ž๋ฅผ ํ•œ ๋งˆ๋ฆฌ๋„ ๋ฐฐ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์นœ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ 9901๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

๋ฐ˜์‘ํ˜•