๐Ÿ‘ฉโ€๐ŸŽ“๊ณต๋ถ€ - 2024.01.09 ์˜ค๋Š˜์˜ ๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด

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

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

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

13023๋ฒˆ - ABCDE

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

N,M = map(int,input().split())
graph = [[] for _ in range(N)]
visited = [0]*N
depth = 0
for _ in range(M):
    a,b = map(int,input().split())
    graph[a].append(b)
    graph[b].append(a)

์ผ๋‹จ ๊ทธ๋ž˜ํ”„, ๋ฐฉ๋ฌธ์—ฌ๋ถ€(๋ฐฑํŠธ๋ž˜ํ‚น), ์ธก์ • ๊นŠ์ด ๋“ฑ์„ ๋ฐ›์•„์ฃผ๊ณ  ํ•ด๋‹น ์ธ๋ฑ์Šค.append(ํ•ด๋‹น ๊ฐ’) ์œผ๋กœ ์นœ๊ตฌ๊ด€๊ณ„๋ฅผ ๊ทธ๋ž˜ํ”„์— ๊ธฐ๋กํ•ด์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

for i in range(N):
    result = dfs(i)
    if result == True:
        break
    depth = 0

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์ œ ์ฒ˜์ ˆํ•œ ๋ชธ๋ถ€๋ฆผ์ด ์‹œ์ž‘๋˜๋Š”๋ฐ...
dfs ๋ฆฌํ„ด๊ฐ’์ด True ๊ฐ€ ๋‚˜์˜ค๋ฉด ์นœ๊ตฌ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ์ง€์ •ํ•˜๊ณ  break๋ฅผ ์ณ์„œ ์กฐ๊ธˆ์ด๋ผ๋„ ์‹œ๊ฐ„๋‚ญ๋น„๋ฅผ ์ค„์ด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํƒ์ƒ‰์„ ํ•œ๋ฒˆ ๋Œ๋ฉด ๋‹ค์‹œ ํƒ์ƒ‰์„ ๋Œ๋„๋ก ๊นŠ์ด๋ฅผ ์ดˆ๊ธฐํ™”์‹œ์ผœ์ค๋‹ˆ๋‹ค.

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

์‹œ๊ฐ„์ดˆ๊ณผ ๋ฐฉ์ง€๋กœ sysinputํ•˜๊ณ  recursionerror๋ฅผ ํ”ผํ•˜๊ธฐ์œ„ํ•ด setrecursionlimit์„ ์ง€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

def dfs(N):
    global depth
    if depth > 3:
        return True

์ผ๋‹จ ์ € depth > 3์ด๋ผ๋Š” ๊นŠ์ด๊ฐ€ ๋งŒ์กฑํ• ๊ฒฝ์šฐ ํ•จ์ˆ˜ํƒˆ์ถœ ์ด๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ์œ„ ์•„๋ž˜ ๋‘˜ ๋‹ค ์ ์–ด์ค„ ๊ฒ๋‹ˆ๋‹ค. PS์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ ์ œ ์ฝ”๋“œ์—์„œ ์ €๊ฑธ ์œ„์— ํ•˜๋‚˜ ์ ๊ฑฐ๋‚˜ ์•„๋ž˜์— ํ•˜๋‚˜ ์ ์œผ๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋”๋ผ๊ณ ์š”.

    visited[N] = 1
    for i in graph[N]:
        if not visited[i]:
            depth += 1
            dfs(i)

ํ•ด๋‹น ์ธ๋ฑ์Šค ๋ฐฉ๋ฌธํ‘œ์‹œ๋ฅผ ํ•ด์ฃผ๊ณ  ์ธ๋ฑ์Šค ์•ˆ์˜ ๊ฐ’์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊นŠ์ด๋ฅผ ํ•˜๋‚˜ ๋” ์˜ฌ๋ ค์ฃผ๊ณ  ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ๋ฐฉ๋ฌธํ•ด์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

    visited[N] = 0
    if depth > 3:
        return True
    depth -= 1

๋งŒ์•ฝ ์ผ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰์ด ๋๋‚ฌ๋‹ค๋ฉด (ํ•˜์œ„๋…ธ๋“œ๊ฐ€ ์—†๊ณ  ์ž๊ธฐ์ž์‹ ์ด ๋ฆฌํ”„๋…ธ๋“œ) ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค (๋ฐฑํŠธ๋ž˜ํ‚น ๊ธฐ๋ฒ•). ์ด์ „์— ๋ง์”€๋“œ๋ ธ๋“ฏ์ด ๋งŒ์•ฝ depth๊ฐ€ 4 ์ด์ƒ์ด๋ผ๋ฉด True๋ฅผ ๋ฆฌํ„ดํ•ฉ์‹œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์žฌ๊ท€๊ฐ€ ๋๋‚˜๊ณ  ๋‚˜์˜จ ์ฝ”๋“œ์ด๋ฏ€๋กœ ์ด์ „ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€์„œ ์ž‘์—…์„ ์น˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ๊นŠ์ด - 1๋กœ ์ด์ „ ๋…ธ๋“œ์˜ ๊นŠ์ด๋ฅผ ์„ค์ •ํ•ด์„œ ๋‹ค์‹œ ํƒ์ƒ‰์— ์ž„ํ•ด์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

if result == True:
    print(1)
else:
    print(0)

๋งˆ์ง€๋ง‰์œผ๋กœ result๊ฐ€ True ๊ฐ’์ด ๋‚˜์˜ค๋ฉด 1, ์•„๋‹ˆ๋ผ๋ฉด 0์„ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


์—ฌ๋‹ด์ด์ง€๋งŒ ํŒŒ์ด์ฌ์œผ๋กœ DFS ํ™œ์šฉ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ์—๋Š”
ํ•ญ์ƒ ์‹œ๊ฐ„์ดˆ๊ณผ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ์—ผ๋‘ํ•ด๋‘๊ณ  ํ’€์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ „์— ์‹ค๋ฒ„์—์„œ ํŠธ๋ฆฌ๋ฌธ์ œ๊ฐ™์ด ์ด์ฐจ์› ๋ฐฐ์—ด ๋นต๋นตํ•˜๊ฒŒ ์ฑ„์›Œ์“ฐ๊ฒŒ ๋˜๋ฉด ๋Œ€๋ถ€๋ถ„ ์˜ค๋ฅ˜์— ๊ฑธ๋ฆฌ๋Š” ๊ฑฐ ๊ฐ™๋„ค์š”.


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

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