링크 : https://www.acmicpc.net/problem/2828
2828번: 사과 담기 게임
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를
www.acmicpc.net
- 문제
- 소요시간: 30분(실패)


- 설계하기(접근방법)
1. 입력받기
입력조건을 잘못 봐서 한참 헤맸다
2. 구현하기
바구니의 길이만큼의 배열을 선언한다
ex) 3이라면
[1,2,3]
만약 사과의 위치가 1,2,3 안에 있다면 이동하지 않는다
만약 배열의 끝인 list[-1] = 3보다 사과의 위치(5)가 크다면
배열의 원소에 1씩 더하면서 이동거리를 늘려주고
배열을 [3,4,5]로 만들어준다.
이 while문의 종료조건은 사과의 위치가 배열에 존재할 때까지이다
반대로
list[0]인 배열의 첫 번째보다 사과의 위치가 작다면 배열을 감소시켜주고
위와 똑같이 하면 된다
3. 출력하기
이동한 거리를 출력한다
- 코드(출력)
screen , basket = map(int, input().split())
apple = int(input())
basket_location = [i + 1 for i in range(basket)]
distance = 0
for i in range(apple):
apple_location = int(input())
if apple_location in basket_location:
continue
elif apple_location < basket_location[0]:
while apple_location not in basket_location:
for j in range(len(basket_location)):
basket_location[j] -= 1
distance += 1
continue
elif apple_location > basket_location[-1]:
while apple_location not in basket_location:
for j in range(len(basket_location)):
basket_location[j] += 1
distance += 1
continue
print(distance)
- 얻어갈 부분
1. 입력하는 변수가 2줄이었는데 1줄로 읽고 이동거리가 정답과 맞지 않아서 크게 혼동했다. 입력조건을 차분하게 읽는 습관을 들이자
'알고리즘(백준) > 그리디' 카테고리의 다른 글
| [알고리즘/그리디] 11501번 : 주식 - python (0) | 2024.01.03 |
|---|---|
| [알고리즘/그리디] 11508번 : 2+1 세일 - python (0) | 2024.01.02 |
| [알고리즘/그리디] 14916번 : 거스름돈 - python (0) | 2024.01.02 |
| [알고리즘/그리디] 1343번 : 폴리오미노 - python (0) | 2024.01.02 |
| [알고리즘/그리디] 22864번 : 피로도 - python (0) | 2023.06.02 |