본문 바로가기
파이썬/파이썬 알고리즘

파이썬 백준 2828번 사과 담기 게임

by Go! Jake 2021. 2. 23.

풀이 과정

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 값에 대입하기'로 개념을 잡았다. 이는 추후 나올 구현 문제에서도 유용하게 사용된다.

 

 

댓글