1168 - 요세푸스 문제 2

LeeKyoungChang·2022년 2월 14일
0

Algorithm

목록 보기
45/203
post-thumbnail

📚 1168 - 요세푸스 문제 2

요세푸스 문제 2

 

풀이

 

소스

from sys import stdin as s

n, k = map(int, s.readline().split())

tree = [0] * 400005


def init(node, s, e):
    if s == e:
        tree[node] = 1
        return tree[node]

    mid = (s + e) >> 1
    tree[node] = init(2 * node, s, mid) + init(2 * node + 1, mid + 1, e)
    return tree[node]


def query(node, s, e, k):
    tree[node] -= 1
    if s == e:
        return s
    mid = (s + e) >> 1
    if tree[2 * node] >= k:
        return query(2 * node, s, mid, k)
    else:
        return query(2 * node + 1, mid + 1, e, k - tree[2 * node])


init(1, 1, n)
x = k
print("<", end="")
for idx in range(0, n - 1):
    print("%d, " % query(1, 1, n, x), end="")
    x += k - 1
    if x % tree[1] == 0:
        x = tree[1]
    else:
        x %= tree[1]

print("%d" % query(1, 1, n, x), end="")
print(">")

 

채점 결과
스크린샷 2022-02-14 오후 11 52 28

 


참고

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글