๐Ÿ‘ฉโ€๐ŸŽ“๊ณต๋ถ€ - 2024.01.30 ์†Œ๋งˆ๋Œ€๋น„ ๋ฌธ์ œํ’€์ด

์œ ๋ น๊ฐœยท2024๋…„ 1์›” 30์ผ
0

PS-์•Œ๊ณ ๋ฆฌ์ฆ˜2

๋ชฉ๋ก ๋ณด๊ธฐ
22/34
post-thumbnail

์•ˆ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋‚˜ 15๊ธฐ ์†Œํ”„ํŠธ์›จ์–ด ๋งˆ์—์ŠคํŠธ๋กœ์— ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ญ๋“  ๋„์ „ํ•ด๋ณด๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ์š”.

๋”ฐ๋ผ์„œ ํ•˜๋˜ DP ์ž ์‹œ ๋ฏธ๋ค„๋‘๊ณ  ์†Œ๋งˆ ๊ธฐ์ถœ ํ‘ธ๋Š”๊ฑฐ์— ์ง‘์ค‘ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ถœ์— DP๋„ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‹ˆ ๊ฒธ์‚ฌ๊ฒธ์‚ฌ ๊ณต๋ถ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1012 - ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

BFS๋กœ 1์ด ๋ญ‰์ณ์žˆ๋Š” ๊ตฌ์—ญ ๊ฐฏ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

T = int(input())
que = deque([])
ans = []

ํ…Œ์ŠคํŠธ์ผ€์ž‡,ํ,๋‹ต์„ ์ถœ๋ ฅํ•  ans๋ฅผ ์„ ์–ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

for _ in range(T):
    
    M,N,K = map(int,input().split())
    graph = [[0]*M for _ in range(N)]
    visited = [[0]*M for _ in range(N)]

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋งŒํผ ๋ฃจํ”„๋ฅผ ๋Œ๋ ค์ฃผ๊ณ , ๊ฐ€๋กœ,์„ธ๋กœ,๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์ž‡๋Š” ์œ„์น˜๋ฅผ ๋ฐ›์•„์„œ


    for _ in range(K):
        a,b = map(int,input().split()) 
        graph[b][a] = 1

๊ทธ๋ž˜ํ”„์— ํ‘œ๊ธฐํ•ด์ค๋‹ˆ๋‹ค. ์ฃผ์˜ํ•  ์ ์€ ์ด๊ณณ ๊ทธ๋ž˜ํ”„์˜ ํ‘œ๊ธฐ ๋ฐฉ์‹์€ ์—ด๊ณผ ํ–‰์ด ๋ฐ˜๋Œ€๋ผ์„œ a์™€ b๋ฅผ ๊ฑฐ๊พธ๋กœ ์ž…๋ ฅ๋ฐ›์•„์•ผ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

    
    cnt = 0
    for i in range(N):
        for j in range(M):
            if not visited[i][j] and graph[i][j] == 1:
                bfs(i,j)
                cnt += 1

๋‹ค์Œ์œผ๋กœ cnt๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋™์•ˆ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง€์—ญ์ด๊ณ  ํ•ด๋‹น ์ง€์—ญ์ด 1์ด๋ผ๋ฉด BFS ํƒ์ƒ‰์œผ๋กœ ๋Œ์•„์ค๋‹ˆ๋‹ค. ํƒ์ƒ‰ ํ›„์—๋Š” cnt๋ณ€์ˆ˜๋ฅผ 1 ์˜ฌ๋ ค์ค๋‹ˆ๋‹ค.

    ans.append(cnt)

for values in ans:
    print(values)

cnt๋ณ€์ˆ˜๋ฅผ ans์— ์ถ”๊ฐ€ํ•˜๊ณ  values๋กœ์จ ์ถœ๋ ฅํ•˜๋ฉด ๋‹ต์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]

BFS๋Š” ํ•ญ์ƒ ๋จน๋˜ ๊ทธ ๋ง›์ž…๋‹ˆ๋‹ค. dx,dy๋กœ ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰ ์„ค์ •ํ•˜๊ณ 

def bfs(x,y):
    que.append([x,y])
    visited[x][y] = 1

ํƒ์ƒ‰์— ๋“ค์–ด์™”์œผ๋ฉด ํ•ด๋‹น ์œ„์น˜๋Š” ๋ฐฉ๋ฌธ์—ฌ๋ถ€ O๋กœ ํ‘œ๊ธฐ ํ•ด์ค๋‹ˆ๋‹ค.

    while que:
        x,y = que.popleft()
        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y
            if nx<0 or ny<0 or nx>=N or ny>=M:
                continue

4๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ์‹ค์‹œํ•˜๋Š”๋™์•ˆ ๊ทธ๋ž˜ํ”„ ๋ฐ–์„ ๋ฒ—์–ด๋‚˜๋ คํ•˜๋ฉด continue๋กœ ๋ง‰์•„์ฃผ๊ณ 

            if not visited[nx][ny] and graph[nx][ny] == 1:
                visited[nx][ny] = 1
                que.append([nx,ny])

๋งŒ์•ฝ์— ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€ ๋ฐฉ๋ฌธ์„ ์•ˆํ–ˆ๊ณ  ํ•ด๋‹น ์ง€์—ญ์ด 1์ด๋ผ๋ฉด ํƒ์ƒ‰ ํ›„๋ณด์ง€์— ๋„ฃ์–ด์ฃผ๊ณ  ๋ฐฉ๋ฌธ์—ฌ๋ถ€ O๋กœ ํ‘œ๊ธฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


9461๋ฒˆ - ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด

๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์‚ผ๊ฐํ˜•์ด ๋‚˜์„  ๋ชจ์–‘์œผ๋กœ ๋†“์—ฌ์ €์žˆ๊ณ  P(N)์€ N๋ฒˆ์งธ ์‚ผ๊ฐํ˜• ๋ณ€์˜ ๊ธธ์ด๋ผ ํ• ๋•Œ, P(N)์„ ๊ตฌํ•˜์‹œ์˜ค.

๋ผ๋Š” DP๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.


๋ถ„์„

๋จผ์ € ์ €๋Š” P(4)์—์„œ ์ ํ™”์‹์„ ๋„์ถœํ•˜๋ ค๊ณ  ๋ดค๋”๋‹ˆ
P(4) = P(3)+P(1) ๊ทธ๋ฆฌ๊ณ  P(4) = P(3)+P(2) ๋ผ๋Š” ์‹์ด ๋‘๊ฐœ๊ฐ€ ๋„์ถœ๋˜์–ด ์ ํ™”์‹์„ ์„ธ์šฐ๋Š”๊ฒŒ ํž˜๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ™•์‹คํžˆ ๊ตฌ๋ถ„๋˜๋Š” ์ง€์ ์„ ๋ดค๋”๋‹ˆ P(11)์„ ์‚ดํŽด๋ณด๋ฉด P(11) = P(10) + P(6)์ธ๋ฐ P(10)๊ณผ P(6)์€ ๊ฐ๊ฐ 9์™€ 3์ธ ์ˆ˜์—ด์— ํ•˜๋‚˜๋ฐ–์— ์—†๋Š” ๊ณ ์œ  ์ˆ˜๋ผ P(11)์˜ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ์ €๊ฒƒ๋ฐ–์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ณธ ๋ฌธ์ œ์—์„œ P(n)์€ P(n-1)+P(n-5)๋ผ๋Š” ์ ํ™”์‹ ๋„์ถœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


์ฝ”๋”ฉ

T = int(input())
for _ in range(T):
    n = int(input())
    print(dp(n-1))

๋จผ์ € ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋ฐ›๊ณ  ๋ฐ›์€๋งŒํผ dpํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€๋กœ์จ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.
n-1๋กœ ๋ณ€์ˆ˜์— ๋„ฃ์€ ์ด์œ ๋Š” ๋ฌธ์ œ๋Š” P(1)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€๋งŒ ์ €๋Š” P(0)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

memo = [0]*101
def dp(N):
    if N == 0 : return 1
    if N == 1 : return 1
    if N == 2 : return 1
    if N == 3 : return 2
    if N == 4 : return 2

๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ  0,1,2 ์ฒซ ์„ธ ์‚ผ๊ฐํ˜•์€ 1๋กœ ์ดˆ๊ธฐํ™”, 3,4 ๋‘๊ฐœ์˜ ์‚ผ๊ฐํ˜•์€ 3,4๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•ด์ค๋‹ˆ๋‹ค. 3,4๋ฅผ ๊ตณ์ด ๋„ฃ์–ด์ฃผ๋Š” ์ด์œ ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์ดˆ๊ธฐํ™” ์‹ ์—†์ด ์ ํ™”์‹ P(4)๋ฅผ ์ž‘๋™ํ•˜๊ฒŒ ๋˜๋ฉด P(3) + P(-1)์ด๋ผ๋Š” ์Œ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

    if memo[N]:
        return memo[N]
    memo[N] = dp(N-1) + dp(N-5)
    return memo[N]

๋ฉ”๋ชจ์ด์ œ์ด์…˜์— ์žˆ์œผ๋ฉด ํ•ด๋‹น ๊ฐ’์œผ๋กœ return ํ•˜๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ํ˜„์žฌ ํƒ์ƒ‰์ค‘์ธ N๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์— ๋„ฃ๊ณ  ํ•ด๋‹น ๊ฐ’์œผ๋กœ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.




profile
ํ•œ๋ฆผ๋Œ€ํ•™๊ต ์ •๋ณด๊ณผํ•™๋Œ€ 2ํ•™๋…„ ์žฌํ•™์ค‘ / ์œก๊ตฐ ์ •๋ณด๋ณดํ˜ธ๋ณ‘ 22-2๊ธฐ

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