1N, M, R = map(int, input().split())
 2
 3item = list(map(int, input().split()))
 4G = [[] for _ in range(N)]
 5for _ in range(R):
 6    a, b, c = map(int, input().split())
 7    G[a-1].append((b-1, c))
 8    G[b-1].append((a-1, c))
 9
10def dfs(node, dist):
11    global result
12    if dist > M:
13        return
14    if not visit[node]:
15        result += item[node]
16    visit[node] = True
17
18    for n_node, n_dist in G[node]:
19        dfs(n_node, dist+n_dist)
20
21max_result = 0
22
23for i in range(N):
24    result = 0
25    visit = [False]*N
26    dfs(i, 0)
27    max_result = max(max_result, result)
28
29print (max_result)
  • ๋ถ„๋ฅ˜์— ๋‹ค์ต์ŠคํŠธ๋ผ, ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ๋กœ ๋˜์–ด์žˆ์ง€๋งŒ DFS๋กœ ํ’€์—ˆ๋‹ค

ํ’€์ด ๋ฐฉ๋ฒ•

  • ์—ฌ๊ธฐ์„œ๋Š” ์žฌ๋ฐฉ๋ฌธ ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ํƒ์ƒ‰์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์•ˆ๋œ๋‹ค
  • ์žฌ๋ฐฉ๋ฌธํ–ˆ์„๋•Œ ์ „์— ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ๋ณด๋‹ค ๋” ์งง์€ ํ†ต๋กœ๋กœ ๋“ค์–ด์™”๋‹ค๋ฉด ๋” ๋งŽ์€ ์•„์ดํ…œ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
  • ๋‹ค๋งŒ, ์•„์ดํ…œ์€ ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค
  • ์œ„์˜ ๋‚ด์šฉ์„ ์งˆ๋ฌธ๊ฒŒ์‹œํŒ์„ ๋ณด๋‹ค๊ฐ€ ๊นจ๋‹ซ๊ณ  ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค

ํ’€์ด๋ฐฉ๋ฒ• 1 : ์ง์ ‘ ๊ตฌํ˜„

 1import sys
 2
 3sys.setrecursionlimit(10**6)
 4class Node:
 5    def __init__(self, value):
 6        self.value = value
 7        self.left = None
 8        self.right = None
 9
10class BinaryTree:
11    def __init__(self, root):
12        self.root = root
13
14    def insert(self, value):
15        cur_node = self.root
16        while True:
17            if value < cur_node.value:
18                if cur_node.left != None:
19                    cur_node =  cur_node.left
20                else:
21                    cur_node.left = Node(value)
22                    break
23            else:
24                if cur_node.right != None:
25                    cur_node = cur_node.right
26                else:
27                    cur_node.right = Node(value)
28                    break
29
30    def traverse(self, node):
31        if node.left != None:
32            self.traverse(node.left)
33        if node.right != None:
34            self.traverse(node.right)
35        print (node.value)
36try:
37    tree = BinaryTree(Node(int(input())))
38except:
39    exit()
40
41while True:
42    try:
43        tree.insert(int(input()))
44    except:
45        break
46
47tree.traverse(tree.root)
  • ์ง์ ‘ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค

ํ’€์ด๋ฐฉ๋ฒ• 2

 1import sys
 2sys.setrecursionlimit(10**6)
 3
 4L = []
 5while True:
 6    try:
 7        L.append(int(input()))
 8    except:
 9        break
10
11def traverse(root, end):
12    if root > end:
13        return
14    mid = end + 1
15
16    for i in range(root+1, end+1):
17        if L[root] < L[i]:
18            mid = i
19            break
20
21    traverse(root+1, mid-1)
22    traverse(mid, end)
23    print (L[root])
24
25traverse(0, len(L)-1)
  • ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ํ‘ธ๋Š” ํ’€์ด๋Š” ์ธํ„ฐ๋„ท์„ ์ฐธ๊ณ ํ•˜์˜€๋‹ค
  • ์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ ํ›„, root ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์ง€๋Š” mid๋ฅผ ์ฐพ์•„
  • root๊ธฐ์ค€ ์™ผ์ชฝ, root๊ธฐ์ค€ ์˜ค๋ฅธ์ชฝ์„ ๊ฐ๊ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
 1R, C, T = map(int, input().split())
 2L = [list(map(int, input().split())) for _ in range(R)]
 3
 4dx = [0, 1, 0, -1]
 5dy = [-1, 0, 1, 0]
 6dx2 = [0, 1, 0, -1]
 7dy2 = [1, 0, -1, 0]
 8
 9pur_a = (0, 0)
10pur_b = (0, 0)
11
12for i in range(R):
13    if L[i][0] == -1:
14        pur_a = (i, 0)
15        pur_b = (i+1, 0)
16        break
17
18def diffuse(L):
19    L_ = [[0]*C for _ in range(R)]
20
21    for i in range(R):
22        for j in range(C):
23            if L[i][j] > 0:
24                cnt = 0
25                for k in range(4):
26                    px = j+dx[k]
27                    py = i+dy[k]
28
29                    if 0 <= px < C and 0 <= py < R and L[py][px] != -1:
30                        L_[py][px] += L[i][j] // 5
31                        cnt += 1
32                L_[i][j] += L[i][j] - ((L[i][j] // 5)*cnt)
33
34    return L_
35
36def air_purify(L):
37    x = pur_a[1]
38    y = pur_a[0]
39    lastX = 0
40    lastY = 0
41    i = 0
42    while i < 4:
43        lastX = x
44        lastY = y
45        x += dx[i]
46        y += dy[i]
47
48        if not (0 <= x < C and 0 <= y < R) or (x, y) == (C-1, pur_a[0]+1):
49            x -= dx[i]
50            y -= dy[i]
51            lastX = x
52            lastY = y
53            i += 1
54            continue
55        if (x, y) == (pur_a[1], pur_a[0]):
56            L[pur_a[0]][pur_a[1]+1] = 0
57            L[pur_a[0]][pur_a[1]] = -1
58            break
59        L[lastY][lastX] = L[y][x]
60
61    x = pur_b[1]
62    y = pur_b[0]
63    i = 0
64    while i < 4:
65        lastX = x
66        lastY = y
67        x += dx2[i]
68        y += dy2[i]
69
70        if not (0 <= x < C and 0 <= y < R) or (x, y) == (C-1, pur_b[0]-1):
71            x -= dx2[i]
72            y -= dy2[i]
73            lastX = x
74            lastY = y
75            i += 1
76            continue
77        if (x, y) == (pur_b[1], pur_b[0]):
78            L[pur_b[0]][pur_b[1]+1] = 0
79            L[pur_b[0]][pur_b[1]] = -1
80            break
81        L[lastY][lastX] = L[y][x]
82
83for i in range(T):
84    L = diffuse(L)
85    air_purify(L)
86
87result = 0
88for i in L:
89    for j in i:
90        if j != -1:
91            result += j
92print (result)

๊ณ ์ฐฐ

  • ๊ตฌํ˜„/์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ด๋‹ค
  • ํ˜ผ์ž ํ’€๊ธดํ–ˆ๋‹ค
  • ๊ตฌํ˜„ ๋ฌธ์ œ๋Š” ํ•ญ์ƒ ํ‘ธ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค

์‹œ๊ฐ„์„ ์žก์•„๋จน์—ˆ๋˜ ๋ถ€๋ถ„

  1. ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ํ™•์‚ฐ๋˜๋Š” ๋ถ€๋ถ„
    • ์ธ์ ‘ํ•œ ๋‘ ๊ณณ์— ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์กด์žฌํ• ๋•Œ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผํ–ˆ๋‹ค
    • ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค
  2. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋กœ๋ถ€ํ„ฐ ๋ฐ”๋žŒ์ด ์‹œ๊ณ„๋ฐฉํ–ฅ, ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋„๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ถ€๋ถ„
    • lastX, lastY๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ด์ „์— ์žˆ์—ˆ๋˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋’ค ํ˜„์žฌ ๊ฐ’์„ ์ด์ „์˜ ๊ณต๊ฐ„์— ๋Œ€์ž…ํ•œ๋‹ค
    • ์ด๋ฅผ ์œ„ํ•ด ์ˆœํšŒ๋ฅผ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ํ•ด์•ผํ•œ๋‹ค (์‹œ๊ณ„->๋ฐ˜์‹œ๊ณ„, ๋ฐ˜์‹œ๊ณ„->์‹œ๊ณ„)