๐ŸŒณ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ

๋ฐฑ์ค€ Class4 Gold5

solved_ac[Class4] ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ

๋ฌธ์ œ


์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

  • ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘๋‹ค.
  • ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ํ‚ค๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฌ๋‹ค.
  • ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋„ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์ด๋‹ค.

img

์ „์œ„ ์ˆœํšŒ (๋ฃจํŠธ-์™ผ์ชฝ-์˜ค๋ฅธ์ชฝ)์€ ๋ฃจํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ๋…ธ๋“œ์˜ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ›„์œ„ ์ˆœํšŒ (์™ผ์ชฝ-์˜ค๋ฅธ์ชฝ-๋ฃจํŠธ)๋Š” ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ๋ฃจํŠธ ๋…ธ๋“œ ์ˆœ์„œ๋Œ€๋กœ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋Š” 50 30 24 5 28 45 98 52 60 ์ด๊ณ , ํ›„์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋Š” 5 28 24 45 30 60 52 98 50 ์ด๋‹ค.

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ


ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋…ธ๋“œ์— ๋“ค์–ด์žˆ๋Š” ํ‚ค์˜ ๊ฐ’์€ 106๋ณด๋‹ค ์ž‘์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. ๋ชจ๋“  ๊ฐ’์€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง€๋ฉฐ, ๋…ธ๋“œ์˜ ์ˆ˜๋Š” 10,000๊ฐœ ์ดํ•˜์ด๋‹ค. ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ


์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1

50
30
24
5
28
45
98
52
60

์˜ˆ์ œ ์ถœ๋ ฅ 1

5
28
24
45
30
60
52
98
50

๐Ÿ“– ์ž๋ฃŒ๊ตฌ์กฐ

โญ๏ธ [BST๋Š” ๋ฐ์ดํ„ฐ ํƒ์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.] โญ๏ธ

Binary Search Tree

์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„์„ ํ˜• ๊ตฌ์กฐ์— ์†ํ•œ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-07-17 แ„‹แ…ฉแ„’แ…ฎ 9 35 43

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์™€ ๊ฐ™์€ ํŠธ๋ฆฌ์—์„œ โ€œ24โ€๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ์ธ โ€œ50โ€์„ ํ™•์ธํ•ด๋ณด์•˜์„ ๋•Œ, โ€œ24 < 50โ€์ด๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋Š” ๋” ์ด์ƒ ํ™•์ธ ์•ˆํ•ด๋„ ๋˜๋ฏ€๋กœ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์—ฐ์‚ฐ๋Ÿ‰์ด ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค๊ณ  ๋”ฐ๋ผ์„œ BST์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(logN)์ด๋‹ค.

์„ ํ˜• ๊ตฌ์กฐ์ธ ๋ฆฌ์ŠคํŠธ์˜ ํƒ์ƒ‰ ์†๋„๊ฐ€ O(N)์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ตœ์•…์˜ ๊ฒฝ์šฐ(์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ OR ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ) ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋™์ผํ•˜๊ฒŒ O(N)์œผ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

ํ›„์œ„ ์ˆœํšŒ

์ด ๋ฌธ์ œ์—์„œ๋Š” Binary Tree๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ํ›„์œ„ ์ˆœํšŒ ํ•จ์ˆ˜ ๊ตฌํ˜„์„ ์š”๊ตฌํ•œ๋‹ค.

์ผ์ข…์˜ ๊ณต์‹์ฒ˜๋Ÿผ ์™ธ์›Œ๋„ ๋˜๊ฒ ์ง€๋งŒ ์žฅ๊ธฐ ๊ธฐ์–ต์„ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ํ•˜๋‚˜์”ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์ดํ•ดํ•ด๋ณด์ž.

  • ์‹œ์ž‘ ๋…ธ๋“œ์™€ ๋ ๋…ธ๋“œ๋ฅผ ์ •ํ•œ๋‹ค.
  • ์‹œ์ž‘ ๋…ธ๋“œ๊ฐ€ ๋ ๋…ธ๋“œ๋ฅผ ์•ž์งˆ๋Ÿฌ๊ฐ€๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.
  • ํ›„์œ„ ์ˆœํšŒ์˜ ํฌ์ธํŠธ๋Š” <์™ผ์ชฝ ๐Ÿ‘‰๐Ÿป ์˜ค๋ฅธ์ชฝ ๐Ÿ‘‰๐Ÿป ๋ฃจํŠธ ๋…ธ๋“œ> ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์˜ Sub Tree๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

<์™ผ์ชฝ ๐Ÿ‘‰๐Ÿป ์˜ค๋ฅธ์ชฝ ๐Ÿ‘‰๐Ÿป ๋ฃจํŠธ ๋…ธ๋“œ> โ€œ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„โ€

  • ๊ตฌ๋ถ„ํ•œ ๊ตฌ๋ถ„์ ์„ ๊ฐ€์ง€๊ณ  ์™ผ์ชฝ Sub Tree๋ฅผ ํƒ์ƒ‰
  • ์˜ค๋ฅธ์ชฝ Sub Tree ํƒ์ƒ‰
  • ๋ฃจํŠธ ๋…ธ๋“œ ์ถœ๋ ฅ

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป CODE

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

### ๋ฌธ์ œ ์กฐ๊ฑด ###
binary_tree = []
while True:
    try:
        binary_tree.append(int(input()))
    except:
        break
### ###

# BST ํ›„์œ„ ์ˆœํšŒ
def post_order(start,end):
    if start > end:
        return
    root = end+1 # ์˜ค๋ฅธ์ชฝ Sub Tree๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„

    for i in range(start+1,end+1):
        # ์˜ค๋ฅธ์ชฝ Sub Tree ๋ฐœ๊ฒฌ
        if binary_tree[i] > binary_tree[start]:
            root = i
            break
    
    post_order(start+1,root-1) # ์™ผ์ชฝ Sub Tree Traverse
    post_order(root,end) # ์˜ค๋ฅธ์ชฝ Sub Tree Traverse

    print(binary_tree[start])

post_order(0,len(binary_tree)-1)

์žฌ๊ท€ ์ œํ•œ ๊ฑธ์–ด์ฃผ๋Š” ๊ฒƒ ์œ ์˜


ยฉ 2022. All rights reserved.

Powered by Hydejack v9.1.6