풀이 과정
N,M=map(int,input().split())
number=int(input())
x=1
y=M
nx=0
ny=0
count=0
for i in range(number):
new_apple=int(input())
if new_apple>=x and y>=new_apple:
continue
elif new_apple > y:
count+=new_apple-y
nx=x+(new_apple-y)
ny=y+new_apple-y
x=nx
y=ny
elif new_apple < x:
count+=x-new_apple
nx=x-(x-new_apple)
ny=y-(x-new_apple)
x=nx
y=ny
print(count)
- 바구니를 x,y로 둔다. 이 범위를 벗어나면 바구니가 이동하도록 구현한다.
바구니 가장 왼쪽이 x, 오른쪽이 y가 된다.
- x와 y의 범위를 벗어나면, 각각 바구니의 위치 x,y가 이동하도록 한다. 이동할 때 count를 올린다.
- 신규 x,y 좌표는 nx와 ny로 구현하고, 계산이 끝나면 각각 x,y에 넣어둔다.
오답노트
elif new_apple < x:
count+=x-new_apple
x=x-(x-new_apple)
y=y-(x-new_apple)
위와 같이 구현하였다. x=x-(x-new_apple)로 구현하면, 신규 y좌표를 계산할 때 계산된 x값이 계산되기 때문에 정상적으로 계산되지 않는다.
이번 경험을 토대로, 좌표 개념으로 문제를 풀 때는 반드시 'x,y좌표 구하기 - nx,ny로 신규 좌표 구하기 - 정상적이라면 x,y 값에 대입하기'로 개념을 잡았다. 이는 추후 나올 구현 문제에서도 유용하게 사용된다.
'파이썬 > 파이썬 알고리즘' 카테고리의 다른 글
파이썬 코드업 1001번 1001 : [기초-출력] 출력하기01(설명) (0) | 2021.03.25 |
---|---|
파이썬 백준 13458번 시험 감독 (0) | 2021.03.23 |
파이썬 백준 13301번 수학 합 (0) | 2021.02.20 |
파이썬 백준 8393번 수학 합 (0) | 2021.02.16 |
파이썬 백준 2742번 제문 는하력출 지까N 터부1 (0) | 2021.02.12 |
댓글