Algorithm (PS)

[백준] 20364번 : 부동산 다툼 (Python) -이진트리

minjiwoo 2022. 12. 29. 17:49
728x90

https://www.acmicpc.net/problem/20364

 

20364번: 부동산 다툼

첫 번째 줄에 땅 개수 N과 꽉꽉나라에 사는 오리 수 Q가 공백으로 구분되어 주어진다. (2 ≤ N < 220, 1 ≤ Q ≤ 200,000) 두 번째 줄부터 차례로 Q개의 줄에 걸쳐 i+1번째 줄에는 i번째 오리가 원하

www.acmicpc.net

import sys 
input = sys.stdin.readline 

n, q = map(int, input().split())
visited = set() # 이미 오리가 차지하고 있는 땅 

def traverse(x):
    global visited
    node = x
    answer = 0 

    while node > 0:
        if node in visited:
            answer = node # 역순으로 방문하므로 가장 최신의 node가 처음 만나는 node가 된다. 
        node //= 2
        
    if answer == 0: # 이미 차지한 땅을 방문하지 않은 경우 
        visited.add(x)    
    print(answer)
    


for i in range(q):
    x = int(input().rstrip())
    traverse(x)
728x90