백준/Greedy
[백준] 2828번: 사과담기 게임
ydin
2022. 2. 10. 11:09
-문제: https://www.acmicpc.net/problem/2828
-정답풀이:
주어진 위치(p)에 따라서 움직이는데
if p>end:(이전 위치보다 오른쪽에 있을때)
p가 이전 바구니 end보다 먼 곳에 있다면 끝 부분을 오른쪽 끝으로 한뒤 왼쪽으로 바구니를 놓으면 된다 (주어진 값이 스크린 끝일 경우 이걸 쓰는 것 같다)
elif p<start:(이전 위치보다 왼쪽에 있을때)
p가 이 전 바구니 start보다 왼쪽에 있을 때인데(p start 순서로) 그럼 start를 p로 끌어오면 되므로 move+= start-p가 된다
start,end는 현재 위치(p)와 바구니 크기를 고려해서 입력하면된다
n,m=map(int,input().split())
j=int(input())
start=1
end=m
move=0
for _ in range(j):
p=int(input())
if p< start:
move+=start-p
start=p
end=start+m-1
elif p>end:
move+=p-end
end=p
start=end-m+1
print(move)
-틀린풀이:
else문을 보면 정답풀이의 elif문과 똑같은데 if문 구현하는데 있어서 틀린 것 같다
if문을 이렇게 작성한 이유가 바구니는 스크린을 넘어가면 안되므로 주어진 값이 n과 동일하거나, 주어진 값에서 바구니를 놓았을 때 스크린을 넘는 경우에는 끝을 n에 맞추고 바구니 크기만큼 왼쪽에 넣는거라고 생각했는데 이부분이 틀린 것 같다
그리고 굳이 주어진 값들 리스트로 만들어서 진행 안하고, 값 받아서 바로 move값 구해서 더하면 된다