SWLUG/๋ฐฑ์ค€ BEAKJOON

[BAEKJOON/ ๋ฐฑ์ค€] 1520๋ฒˆ: ๋‚ด๋ฆฌ๋ง‰ ๊ธธ (Python)

waterproof 2024. 4. 2. 22:02

 


[1] ์ •๋‹ต ์ฝ”๋“œ

 

import sys
sys.setrecursionlimit(10**5)
input=sys.stdin.readline

M,N=map(int, input().split())
plan=[list(map(int, input().split())) for _ in range(M)]
route=[[-1]*N for _ in range(M)]

dx=[1,-1,0,0]
dy=[0,0,1,-1]
def dfs(start):
    x,y=start
    if x==M-1 and y==N-1: return 1
    if route[x][y]!=-1: return route[x][y]
    route[x][y]=0
    for i in range(4):
        nx=x+dx[i]
        ny=y+dy[i]
        if nx<0 or nx>=M or ny<0 or ny>=N: continue
        if plan[nx][ny]<plan[x][y]: route[x][y]+=dfs([nx,ny])
    return route[x][y]
dfs([0,0])
print(route[0][0])

 

1. import sys: sys ๋ชจ๋“ˆ์„ ์ž„ํฌํŠธํ•œ๋‹ค.

 

2. sys.setrecursionlimit(10**5): ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์ด๋Š” ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๊นŠ์ด ์ œํ•œ์„ ๋Š˜๋ ค์ค€๋‹ค.

 

3. input=sys.stdin.readline: input ํ•จ์ˆ˜์— sys.stdin.readline์„ ํ• ๋‹นํ•˜์—ฌ ์ž…๋ ฅ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

4. M,N=map(int, input().split()): ์ฒซ ๋ฒˆ์งธ ์ค„์—์„œ M๊ณผ N์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. M์€ ํ–‰์˜ ๊ฐœ์ˆ˜, N์€ ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

5. plan=[list(map(int, input().split())) for _ in range(M)]: ์ด์–ด์ง€๋Š” M๊ฐœ์˜ ์ค„์—์„œ MxN ํฌ๊ธฐ์˜ ๋ฏธ๋กœ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์ธ plan์— ์ €์žฅํ•œ๋‹ค. plan[i][j]๋Š” (i, j) ์œ„์น˜์˜ ๋†’์ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • input().split(): input() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ•œ ์ค„์˜ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  split() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ์ค„์— ์ž…๋ ฅ๋œ ๊ฐ’๋“ค์ด ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
  • list(map(int, ...)): ๋ถ„๋ฆฌ๋œ ๊ฐ ์š”์†Œ๋“ค์„ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. map() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ž์—ด ํ˜•ํƒœ์˜ ์ˆซ์ž๋“ค์ด ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
  • list(map(int, input().split())): ๊ฒฐ๊ตญ ํ•œ ์ค„์— ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค. ์ด ๊ณผ์ •์„ M๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ, M๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • [... for _ in range(M)]: ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ M๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. _ ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋ณต๋ฌธ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋ฌด์‹œํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ด€๋ก€์ ์ธ ๋ณ€์ˆ˜์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” _๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ฌด์‹œํ•˜๊ณ  ์žˆ๋‹ค.
  • plan=: ์ƒ์„ฑ๋œ ๋ฆฌ์ŠคํŠธ๋“ค์„ plan ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด MxN ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. ๊ฐ ์š”์†Œ์ธ plan[i][j]๋Š” (i, j) ์œ„์น˜์˜ ๋†’์ด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

6. route=[[-1]*N for _ in range(M)]: MxN ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ route๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. route[i][j]๋Š” ์ถœ๋ฐœ์ง€(0, 0)์—์„œ (i, j)๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ดˆ๊ธฐ๊ฐ’์€ -1๋กœ ์„ค์ •๋œ๋‹ค.

 

  • [-1]*N: N๊ฐœ์˜ -1๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ํ–‰์˜ ์ดˆ๊ธฐ๊ฐ’์ด ๋œ๋‹ค. ๋งŒ์•ฝ N์ด 3์ด๋ผ๋ฉด [-1, -1, -1]์ด ๋œ๋‹ค.
  • [...] for _ in range(M): ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ M๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑ๋ž€๋‹ค. ๊ฐ ๋ฆฌ์ŠคํŠธ๋Š” N๊ฐœ์˜ -1๋กœ ์ด๋ฃจ์–ด์ง„ ํ–‰์ด ๋˜๋ฉฐ, ์ „์ฒด์ ์œผ๋กœ MxN ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. _ ๋ณ€์ˆ˜๋Š” ๋ฐ˜๋ณต๋ฌธ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋ฌด์‹œํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ด€๋ก€์ ์ธ ๋ณ€์ˆ˜์ด๋‹ค.
  • route=: ์ƒ์„ฑ๋œ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ route ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ถœ๋ฐœ์ง€(0, 0)์—์„œ ๊ฐ ์œ„์น˜ (i, j)๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” route ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ๋Š” ๋ชจ๋“  ์œ„์น˜์˜ ๊ฒฝ๋กœ ์ˆ˜๊ฐ€ -1๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

 

7. dx=[1,-1,0,0], dy=[0,0,1,-1]: ์ƒํ•˜์ขŒ์šฐ๋กœ ์ด๋™ํ•  ๋•Œ์˜ x์ถ•๊ณผ y์ถ• ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

8. def dfs(start):: DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •์˜ํ•œ๋‹ค. start๋Š” ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฆฌ์ŠคํŠธ [x, y]์ด๋‹ค.

 

9. x, y = start: ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

10. if x==M-1 and y==N-1: return 1: ๋งŒ์•ฝ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ๋„์ฐฉ์ง€์ ์ธ ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žฌ๊ท€๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

 

11. if route[x][y] != -1: return route[x][y]: ๋งŒ์•ฝ ํ˜„์žฌ ์œ„์น˜๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜๊ฐ€ ์ด๋ฏธ ๊ณ„์‚ฐ๋˜์–ด ์žˆ์œผ๋ฉด ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

12. route[x][y] = 0: ํ˜„์žฌ ์œ„์น˜๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

 

13. for i in range(4):: ์ƒํ•˜์ขŒ์šฐ๋กœ ์ด๋™ํ•˜๋ฉฐ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.

 

14. nx = x + dx[i], ny = y + dy[i]: ๋‹ค์Œ ์ด๋™ํ•  ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

 

15. if nx < 0 or nx >= M or ny < 0 or ny >= N: continue: ๋ฏธ๋กœ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ ๋ฐฉํ–ฅ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

 

16. if plan[nx][ny] < plan[x][y]: route[x][y] += dfs([nx, ny]): ํ˜„์žฌ ์œ„์น˜์˜ ๋†’์ด๋ณด๋‹ค ๋‚ฎ์€ ์œ„์น˜๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ค์Œ ์œ„์น˜๊ฐ€ ํ˜„์žฌ ์œ„์น˜๋ณด๋‹ค ๋‚ฎ์€ ๋†’์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์œ„์น˜๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ route[x][y]์— ๋”ํ•ด์ค€๋‹ค.

 

17. return route[x][y]: ํ˜„์žฌ ์œ„์น˜๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

18. dfs([0,0]): ์ถœ๋ฐœ์ง€(0, 0)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•œ๋‹ค.

 

19. print(route[0][0]): ์ถœ๋ฐœ์ง€(0, 0)์—์„œ ๋„์ฐฉ์ง€(M-1, N-1)๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๋”๋ณด๊ธฐ

sys.setrecursionlimit()

 

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

sys.setrecursionlimit() ํ•จ์ˆ˜๋Š” ํŒŒ์ด์ฌ์—์„œ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๊นŠ์ด ์ œํ•œ์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ธ์ž๋กœ๋Š” ์ •์ˆ˜๊ฐ’์„ ๋ฐ›์œผ๋ฉฐ, ์ด ๊ฐ’์€ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

sys.setrecursionlimit(10**5)์€ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ 10์˜ 5์Šน, ์ฆ‰ 100,000์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋” ๊นŠ์€ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ, ์ผ๋ถ€ ๋ณต์žกํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฃผ์˜ํ•  ์ ์€ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๊นŠ์ด ์ œํ•œ์„ ๋„ˆ๋ฌด ํฌ๊ฒŒ ๋Š˜๋ฆฌ๋ฉด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Stack Overflow) ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊นŠ์ด ์ œํ•œ์„ ๋ณ€๊ฒฝํ•  ๋•Œ์—๋Š” ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.

 


์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Stack Overflow)

 

์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ(์˜์–ด: stack overflow)๋Š” ์Šคํƒ ํฌ์ธํ„ฐ๊ฐ€ ์Šคํƒ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด์„ค ๋•Œ ์ผ์–ด๋‚œ๋‹ค. ํ˜ธ์ถœ ์Šคํƒ์€ ์ œํ•œ๋œ ์–‘์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ด๋ฃจ๋ฉฐ ๋Œ€๊ฐœ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ ๊ฒฐ์ •๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ํ˜ธ์ถœ ์Šคํƒ์—์„œ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„ ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ๋•Œ ๋˜๋Š” ์ง€์ •๋œ ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ๊ณผ๋‹คํ•œ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ(overflow)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์ด ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋“ฑ '์—๋Ÿฌ ๋ฐœ์ƒ'์ด ์ˆ˜๋ฐ˜๋œ๋‹ค.

 

 


input=sys.stdin.readline

 

ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜ํ•œ, ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜์—ฌ ์ฝœ๋ฐฑ(callback) ํ•จ์ˆ˜๋กœ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 


[2] ํ•„์š”ํ•œ ๋ฐฐ๊ฒฝ ์ง€์‹

 

์ด ๋ฌธ์ œ๋Š” DP(Dynamic Programming)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DFS(Depth-First Search) ๋ฌธ์ œ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

 

1. DP(Dynamic Programming)๋ž€?

 

๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.

๋ถ„ํ•  ์ •๋ณต(Divide and Conquer)๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ, ๋ถ„ํ•  ์ •๋ณต๊ณผ์˜ ์ฐจ์ด์ ์€ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ, ๊ทธ๊ฒƒ์„ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)ํ•˜์—ฌ ๋‹ค๋ฅธ ๋น„์Šทํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์ด ๋‹ค์‹œ ๋ฐœ์ƒํ•  ๋•Œ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™€ ์žฌํ™œ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

 

  • ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(Optimal Substructure): ์ „์ฒด ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๊ฐ€ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋กœ๋ถ€ํ„ฐ ๊ตฌํ•ด์งˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. Fibonacci ์ˆ˜์—ด์˜ ๊ฒฝ์šฐ ์ฒซ๋ฒˆ์งธ ๋‘๋ฒˆ์งธ ์ˆ˜์—ด์€ ๊ฐ๊ฐ 1๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค. (ํŽธ์˜์ƒ 0๋ฒˆ์งธ ํ•ญ์ด 0์ด ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.) ์ฆ‰, 3๋ฒˆ์งธ ์ˆ˜์—ด์€ ์–ธ์ œ๋‚˜ ๊ฒฐ๊ณผ๊ฐ€ 2์ด๋‹ค. ๋˜ 4๋ฒˆ์งธ ์ˆ˜์—ด์€ 3๋ฒˆ์งธ ์ˆ˜์—ด๊ณผ 2๋ฒˆ์งธ ์ˆ˜์—ด์„ ์ด์šฉํ•ด ๊ตฌํ•˜๋ฏ€๋กœ ์–ธ์ œ๋‚˜ ์ •๋‹ต์ด ๊ฐ™๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ(Overlapping Subproblems): F(5)๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” F(4), F(3)์ด ํ•„์š”ํ•˜๋‹ค. ๋‹ค์‹œ F(4)๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” F(3),F(2)๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด F(5)์—์„œ๋„ F(3)์ด ํ•„์š”ํ•˜๊ณ  F(4)์—์„œ๋„ F(3)์ด ํ•„์š”ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์ค‘๋ณต๋˜์–ด ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณต ๊ณ„์‚ฐ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

 

2. ๋ฉ”๋ชจ์ด์ œ์ด์…˜ (Memoization)


๋ฉ”๋ชจ์ด์ œ์ด์…˜(memoization)์€ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ดํ›„ ๊ฐ™์€ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ๋•Œ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ์ €์žฅ๋œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€์„œ ์žฌํ™œ์šฉํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค.

๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์บ์‹œ(Cache)๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ž‘ํ•œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๊ฐ’์„ ์บ์‹œ์— ์ €์žฅํ•œ๋‹ค. ์ดํ›„ ๊ฐ™์€ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๊ณ„์‚ฐํ•˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์†๋„๋ฅผ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 


๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.

  • ๋ฌธ์ œ๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š” ์ค‘๋ณต๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋Œ€๋ถ€๋ถ„์˜ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ Top-Down ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

ํ•˜์ง€๋งŒ Bottom-Up ๋ฐฉ์‹์œผ๋กœ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ์—๋„ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜์—ฌ ์žฌํ™œ์šฉํ•œ๋‹ค.

 

 

์ถœ์ฒ˜:

https://galid1.tistory.com/507

https://ai-sinq.tistory.com/entry/%EB%8F%99%EC%A0%81-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-Dynamic-Programming-DP

 

 

3. ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

 

โžฐTop-Down

Top-Down์€ ๋ถ„ํ•  ์ •๋ณต๊ณผ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ „์ฒด ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ทธ ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์žฌ๊ท€์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด ๋•Œ, ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•˜์—ฌ ์žฌํ™œ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

Top-Down ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€์ง€๋งŒ, ๋งŽ์€ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์ฒ˜๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โžฐBottom-Up

Bottom-Up์€ ์žฌ๊ท€์ ์ธ ํ˜ธ์ถœ ์—†์ด, ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์„ ๋จผ์ € ํ•ด๊ฒฐํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•ด ์ „์ฒด ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋•Œ, ์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ ๋“ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Bottom-Up ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์€ ๋‚ฎ์•„์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งŽ์€ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ํšจ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์ฒ˜๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†๋‹ค.

 

 

 

4. DFS(Depth-First Search)๋ž€?

 

ํŠธ๋ฆฌ๋‚˜ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์ž์‹์˜ ๋…ธ๋“œ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊นŠ์ด๋ฅผ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

DFS๋Š” ์ฃผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, ์žฌ๊ท€๋ฌธ์„ ํ†ตํ•˜์—ฌ ๊ตฌํ˜„๋œ๋‹ค.

 

ํƒ์ƒ‰ ๊ณผ์ •์ด ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ํ•œ์—†์ด ๊นŠ์ด ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๊นŠ์ด ์ œํ•œ(depth bound)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊นŠ์ด ์ œํ•œ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋ชฉํ‘œ๋…ธ๋“œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ์ตœ๊ทผ์— ์ฒจ๊ฐ€๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋กœ ๋˜๋Œ์•„์™€์„œ, ๋ถ€๋ชจ๋…ธ๋“œ์— ์ด์ „๊ณผ๋Š” ๋‹ค๋ฅธ ๋™์ž‘์ž๋ฅผ ์ ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ž์‹๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ถ€๋ชจ๋…ธ๋“œ๋กœ ๋˜๋Œ์•„์˜ค๋Š” ๊ณผ์ •์„ ๋ฐฑํŠธ๋ž˜ํ‚น(backtracking)์ด๋ผ ํ•œ๋‹ค.

 

DFS์˜ ๊ธฐ๋ณธ ํƒ์ƒ‰ ๊ณผ์ •์€ ํŠน์ • ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์—ญ์ถ”์ (backtracking) ํ•˜๊ธฐ ์ „์— ๊ฐ ๋ถ„๊ธฐ๋ฅผ ๋”ฐ๋ผ ๊ฐ€๋Šฅํ•œ ํ•œ ๋ฉ€๋ฆฌ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

2. ๋ฐฉ๋ฌธํ•œ ํ‘œ์‹œ๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฐ๊ฐ์˜ ์ธ์ ‘ํ•œ ์ •์ ์„ ํƒ์ƒ‰ํ•œ๋‹ค.

3. ๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ์ด ์—†์œผ๋ฉด ์ด์ „ ์ •์ ์œผ๋กœ ์—ญ์ถ”์ (backtracking) ํ•œ๋‹ค.

4. ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

 

 

 

 

์žฅ์ 

  • ๋‹จ์ง€ ํ˜„ ๊ฒฝ๋กœ์ƒ์˜ ๋…ธ๋“œ๋“ค๋งŒ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ €์žฅ๊ณต๊ฐ„์˜ ์ˆ˜์š”๊ฐ€ ๋น„๊ต์  ์ ๋‹ค.
  • ๋ชฉํ‘œ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋ฅผ ๋นจ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ 

  • ํ•ด๊ฐ€ ์—†๋Š” ๊ฒฝ๋กœ์— ๊นŠ์ด ๋น ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ์˜ ๊ฒฝ์šฐ ๋ฏธ๋ฆฌ ์ง€์ •ํ•œ ์ž„์˜์˜ ๊นŠ์ด๊นŒ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๊ณ  ๋ชฉํ‘œ๋…ธ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ์˜ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์–ป์–ด์ง„ ํ•ด๊ฐ€ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. ์ด๋Š” ๋ชฉํ‘œ์— ์ด๋ฅด๋Š” ๊ฒฝ๋กœ๊ฐ€ ๋‹ค์ˆ˜์ธ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊นŠ์ด์šฐ์„  ํƒ์ƒ‰์€ ํ•ด์— ๋‹ค๋‹ค๋ฅด๋ฉด ํƒ์ƒ‰์„ ๋๋‚ด๋ฒ„๋ฆฌ๋ฏ€๋กœ, ์ด๋•Œ ์–ป์–ด์ง„ ํ•ด๋Š” ์ตœ์ ์ด ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

 

์ถœ์ฒ˜:

https://olrlobt.tistory.com/35

, ๋‚˜๋ฌด์œ„ํ‚ค


[3] ๋Š๋‚€ ์ 

 

DP์™€ DFS ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ๊ฐœ๋…์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์ด ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค!

๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ฉฐ ์—ฐ์Šต์„ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.