Algorithm

[백준][python]15721 번데기

soduddl1 2023. 3. 5. 11:55

문제

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

소스코드

import sys
input = sys.stdin.readline

if __name__ == "__main__":
    a = int(input())
    t = int(input())
    x = int(input())

    bundegi = []
    bun = degi = 1
    n = 0

    while 1:
        prebundegi = bun
        n +=1
        for _ in range(2):
            bundegi.append([bun,0])
            bun +=1
            bundegi.append([degi,1])
            degi +=1
        for _ in range(n+1):
            bundegi.append([bun,0])
            bun +=1
        for _ in range(n+1):
            bundegi.append([degi,1])
            degi +=1      
        if prebundegi < t <= bun:
            print(bundegi.index([t,x]) % a)
            break

설명

횟차가 증가함에 따라 번데기 누적수가 쌓인다.

언제 끝날지 모르니 While문을 사용해서 횟차를 진행하며 번데기를 누적한다.

0. 이전 횟수에서 누적된 번데기수를 체크해둔다. 번이랑 데기랑 누적수가 같으니 아무거나 상관없다.

1. 번데기번데기 (무조건 2회씩 선창하니까 한번에 누적)

2. 번번번 ..n+1 , 데기데기데기...n+1 따로따로 for문 돌려서 누적해준다.

3. 이전 누적횟수랑 현재까지 누적횟수 사이에 내가 찾으려는 t가 존재하면 현재 idx 에서 % 팀원 수 해줘서 몇번째 사람인지 찾는다. 첫번째 사람은 0 이므로 % 해주면 된다.

후기

처음에 bun,degi 초기화할 때 횟차가 시작이 안되서 0 으로 초기화했다. 그럼 [0,0] 이렇게 bundegi list에 누적된다.

[몇번째 부른건지, 번데기 찾기] 이 값을 넣으려고 했는데 그럼 첫번째 횟차에 0이 들어가서 내가 의도한 바가 충족이 안된다.