https://www.acmicpc.net/problem/1592
n , m , l = map(int, input().split())
person = [1] + [0] * (n-1)
i = 0
cnt = 0
while max(person) < m :
if person[i] % 2 == 1:
i += l # l 시계 방향
if i >= len(person): # 인덱스>리스트길이
i = i - len(person)
person[i] += 1
else:
i -= l # l 반시계 방향
if i <0 : # 인덱스 음수
i = i + len(person)
person[i] += 1
cnt += 1
print (cnt)
처음에 1번째는 공을 가지고 있으므로 1이라는 값을 가지고 있습니다.
최대값이 m 보다 같아지면 루프를 탈출해야하므로 while문을 사용했습니다.
공을 받은 횟수가 짝수냐 홀수냐에 따라 방향이 달라지는데, 이때 시계방향으로가면 값이 증가가 되고 반시계방향으로 가면 값이 감소가 됩니다. 증가가 되는 경우, 인덱스 값보다 값이 커질 경우가 존재합니다. 이 때 리스트의 길이만큼 빼줍니다. 감소가 되는 경우, 인덱스 값이 음수가 됩니다. 이 때, 리스트 길이만큼 더해줍니다.