반응형
백준 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)
반응형
'ALGORITHM > PYTHON' 카테고리의 다른 글
백준 BAEKJOON 32684번 장기 [PYTHON/파이썬] (2) | 2025.01.03 |
---|---|
백준 BAEKJOON 1919번 애너그램 만들기 [PYTHON/파이썬] (1) | 2024.12.28 |
백준 BAEKJOON 1434번 책 정리 [PYTHON/파이썬] (1) | 2024.12.08 |
백준 BAEKJOON 1145번 적어도 대부분의 배수 [PYTHON/파이썬] (0) | 2024.12.05 |
백준 BAEKJOON 32767번 계산기가 필요해 [PYTHON/파이썬] (0) | 2024.12.04 |