728x90
🍏
https://www.acmicpc.net/problem/2828
2828번: 사과 담기 게임
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를
www.acmicpc.net
내 풀이
N, M = map(int, input().split())
apple = []
s = 0
e = M-1
ans = 0
J = int(input())
for _ in range(J):
apple.append(int(input()))
for i in apple:
if s <= i - 1 <= e:
continue
elif e < i - 1:
ans += i - 1 - e
e = i - 1
s = e - (M - 1)
elif s > i - 1:
ans += s - (i - 1)
s = i - 1
e = s + M - 1
print(ans)
코드 설명
apple: 사과가 떨어지는 위치를 저장하는 리스트
s: 바구니의 시작 위치
e: 바구니의 끝 위치
🍏사과의 위치🍏
1. 사과가 바구니 안에 떨어지는 경우
바구니를 움직일 필요가 없으므로 다음 사과를 검사한다.
if s <= i - 1 <= e:
continue
2. 사과가 바구니 오른쪽으로 떨어지는 경우
바구니의 끝 위치가 사과가 떨어지는 위치와 일치하기 위해 이동해야 하는 거리를 정답 변수에 더해준다.
그에 따라 바구니의 시작 위치와 끝 위치를 조정한다.
elif e < i - 1:
ans += i - 1 - e
e = i - 1
s = e - (M - 1)
3. 사과가 바구니 왼쪽으로 떨어지는 경우
바구니의 시작 위치가 사과가 떨어지는 위치와 일치하기 위해 이동해야 하는 거리를 정답 변수에 더해준다.
그에 따라 바구니의 시작 위치와 끝 위치를 조정한다.
elif s > i - 1:
ans += s - (i - 1)
s = i - 1
e = s + M - 1
2, 3번과 같은 작업을 진행하는 이유는 바구니가 최소 거리를 이동해야 하기 때문이다!
'코딩테스트' 카테고리의 다른 글
[백준][Python] 7490 0 만들기 (1) | 2024.03.28 |
---|---|
[백준][Python] 10828 스택 (0) | 2024.03.27 |
[백준][Python] 14719 빗물 (0) | 2024.03.25 |
[백준][Python] 9935 문자열 폭발 (1) | 2024.03.24 |
[백준][Python] 3085 사탕 게임 (0) | 2024.03.24 |