-
[백준] 사과 담기 게임Algorithm Study/Python 2024. 3. 12. 22:44
https://www.acmicpc.net/problem/2828
2828번: 사과 담기 게임
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를
www.acmicpc.net
풀이
바구니가 사과가 떨어지는 곳에 있으면 사과를 받은 것으로 하고 사과가 떨어지는 곳에 없으면 옮겨서 사과를 받아야하는 문제이다.
이 경우에 바구니의 크기가 항상 1이라면 정말 쉽게 구할 수 있다. 바구니의 현재 위치와 사과가 떨어지는 위치만 구하면 되기 때문이다.하지만 이 문제의 경우 바구니의 크기가 1이 아닐 수 있기 때문에 바구니가 현재 위치한 곳을 표시할 다른 방법이 필요하다.
length, size = map(int, input().split()) N = int(input()) start = 1 end = size
투 포인터의 개념을 이용하여 바구니의 시작, 끝을 모두 표시하는 방법을 사용했다.
바구니는 항상 왼쪽에 붙어있기 때문에 시작은 항상 1 끝은 바구니의 사이즈이다.
for i in range(N): apple = int(input()) if start <= apple and end >= apple: continue
그 후 사과가 바구니의 범위 안에 있으면 무시 (이동이 없음)
else: if apple < start: temp = start - apple start -= temp end -= temp answer += temp elif end < apple: temp = apple - end start += temp end += temp answer += temp
바구니의 범위 밖에 있는 경우는 2가지로 나누어서
1. 사과의 위치가 바구니의 시작보다 작은 경우
2. 사과의 위치가 바구니의 끝보다 큰 경우
로 나누어 계산했다.전체 코드
length, size = map(int, input().split()) N = int(input()) start = 1 end = size answer = 0 for i in range(N): apple = int(input()) if start <= apple and end >= apple: continue else: if apple < start: temp = start - apple start -= temp end -= temp answer += temp elif end < apple: temp = apple - end start += temp end += temp answer += temp print(answer)
바구니의 위치를 시작과 끝으로 표현할 수 있다면 쉽게 풀 수 있는 문제이지만 바구니의 위치를 하나의 변수로 표현한다면
코드가 복잡할 수 있을 것 같다.'Algorithm Study > Python' 카테고리의 다른 글
[백준] 31416번 가상 검증 기술 (0) 2024.03.22 [백준] 9655번 돌 게임 (0) 2024.03.17 [백준] 20115번 에너지 드링크 (0) 2024.03.04 [백준] 1436번 영화감독 숌 (1) 2024.02.27 [백준] 2231번 분해합 (0) 2024.02.27