ALGORITHM/PYTHON

백준 BAEKJOON 1592번 영식이와 친구들 [PYTHON/파이썬]

칼코 2024. 12. 20. 15:33
반응형

 

 

 

 

 

백준 BAEKJOON 1592번 영식이와 친구들 [PYTHON/파이썬]


<문제 출처> (BRONZE Ⅱ)

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

 

 

 

 

 

 

 

<풀이>

영식이와 친구들이 공을 받은 횟수를 리스트로 만들어줬다.

처음에 1번 자리에 앉은 사람이 공을 받으니

[1, 0, 0, 0, ..., 0] 형태로 구현해 줬다.

ball = [1] + [0] * (N - 1)

공을 M번 받은 시점에서 게임이 종료되니

만약 M이 1일 경우에는 바로 게임이 끝나게끔 if 문을 구현했다.

그렇지 않다면 while 문을 활용하여 공을 받은 횟수가 홀수라면 오른쪽으로 L만큼 던지고

짝수라면 왼쪽으로 L만큼 던지게끔 idx 값을 조절했다.

만약 idx가 리스트의 길이인 N의 범위를 벗어날 수도 있으니 if 문으로 idx 값을 조절했다.

# 원형 순환을 위한 idx 값 조절
        if idx >= N:
            idx %= N
        elif idx < 0:
            idx += N

 

조절된 idx를 구한 뒤 해당 idx에 해당하는 값을 +1 시켜주었다.

그리고 해당 idx의 값이 M이라면 while문을 종료시켰다.

마지막으로 공을 던진 횟수를 구해야 하니 리스트에 sum을 사용한 뒤 -1을 해서 출력하면 된다.

(-1을 하는 이유는 초기에 리스트를 구성할 때 [1, 0, 0, 0, ..., 0]  형태로 구현했기 때문)

 

 

 

 

 

 

 

<코드>

N, M, L = map(int, input().split())
ball = [1] + [0] * (N - 1)
idx = 0

if M == 1:
    print(0)
else:
    while 1:
        if ball[idx] % 2 == 1:  # 공을 받은 횟수 : 홀수
            idx += L
        else:  # 공을 받은 횟수 : 짝수
            idx -= L

        # 원형 순환을 위한 idx 값 조절
        if idx >= N:
            idx %= N
        elif idx < 0:
            idx += N

        ball[idx] += 1

        if ball[idx] == M:
            break

    print(sum(ball) - 1)

 

 

 

 

 

 

 

반응형