Koala - 9기/기초 알고리즘 스터디

[백준/python] 2828 사과 담기 게임

허수민 2023. 2. 3. 15:13

2828번: 사과 담기 게임 (acmicpc.net)

 

2828번: 사과 담기 게임

상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를

www.acmicpc.net

 

 

소스 코드

풀이 과정

  • 스크린의 칸 수 N, 한 바구니가 차지하는 칸 수 M을 공백을 두고 입력 받음
  • 떨어지는 사과의 총 개수 J 입력 받음
  • 사과가 떨어지는 위치를 입력 받아 move 리스트 안에 저장
  • 총 이동 칸 수 res, 바구니의 왼쪽 끝 위치 left, 바구니의 오른쪽 끝 위치 right 초기화
    • 바구니의 시작 위치는 1이고 바구니의 총 길이는 M이므로 left는 1, right는 M
  • move 리스트 안에 저장된 위치마다 반복문 실행
    • 이동해야 하는 위치 i가 left보다 작다면 왼쪽으로 이동해야 하므로 left-i 만큼 이동
      1. right도 함께 왼쪽으로 이동하므로 원래 위치에서 이동한 만큼 빼줌
      2. i가 left보다 작다면 left가 i로 이동하는 것이 최소 이동거리가 되므로 left는 i로 갱신
    • 이동해야 하는 위치 i가 right보다 크다면 오른쪽으로 이동해야 하므로 i-right만큼 이동
      1. left도 함께 오른쪽으로 이동하므로 원래 위치에서 이동한 만큼 더해줌
      2. i가 right보다 크다면 right가 i로 이동하는 것이 최소 이동거리가 되므로 right는 i로 갱신
  • 최소 이동거리인 res 출력