다양한 크기를 가진 물체들을 수레로 옮길 때에, 가능한 최소 횟수로 완료하는 알고리듬 과제입니다.
참여자가 문제에 집중할 수 있도록, 메인코드를 제공하는 까닭에 언어를 python으로 제한했습니다.
물체는 10개이며 각 크기는 1~10의 랜덤값입니다. 수레의 크기는 15입니다.
10000번의 반복된 미션을 통해 총 이동횟수의 합을 출력합니다.
참여자는 아래 코딩예제에서 choose라는 함수를 재정의하여 이동횟수를 최적화하시기 바랍니다.
결과를 올리실 때에는 choose 함수 본문과, 메인코드 실행 시 출력결과를 포함하시면 됩니다.
물론 총 이동숫자가 작을 수록 좋은 알고리듬이겠습니다.
```{.python}
########## 아래 함수 choose 를 사용자가 재정의 #########
# 숫자 리스트 things의 숫자들 중,
# cartsize 크기의 수레에 실을 숫자들을 선택하여 리턴
########################################################
def choose(things, cartsize):
chosen = []
chosen_size = 0
for thing in things:
if chosen_size+thing <= cartsize:
chosen.append(thing)
chosen_size += thing
return chosen
############## 아래 본문은 그대로 재사용 ###################
import random
# total_moves 초기화
total_moves = 0
# 총 10000회 시행
for mission in range(10000):
# 10개의 물건들이 각각 1~10 크기로 무작위 생성됨
things = []
for i in range(10):
things.append(random.randrange(1,11))
# print('미션', mission, ':', things)
# 이것들을 크기 15인 수레로 가능한 적은 회수로 이동
while len(things)>0:
chosen = choose(things, 15)
# print(chosen)
for thing in chosen:
things.remove(thing)
total_moves += 1
print('총 이동:', total_moves)
```
정답 댓글은 아래와 같은 예로 넣으시면 됩니다.
```{.python}
def choose(things, cartsize):
chosen = []
chosen_size = 0
for thing in things:
if chosen_size+thing <= cartsize:
chosen.append(thing)
chosen_size += thing
return chosen
```
미션 0 : [10, 5, 7, 9, 3, 2, 1, 10, 9, 4] [10, 5] [7, 3, 2, 1] [9, 4] [10] [9] 미션 1 : [1, 1, 1, 7, 5, 8, 6, 8, 2, 6] [1, 1, 1, 7, 5] [8, 6] [8, 2] [6] 미션 2 : [9, 8, 4, 7, 10, 3, 4, 1, 6, 3] [9, 4, 1] [8, 7] [10, 3] [4, 6, 3] 미션 3 : [10, 10, 4, 3, 10, 9, 8, 2, 1, 5] [10, 4, 1] [10, 3, 2] [10, 5] [9] [8] 미션 4 : [4, 2, 5, 1, 4, 7, 5, 6, 6, 6] [4, 2, 5, 1] [4, 7] [5, 6] [6, 6] 미션 5 : [10, 5, 10, 8, 8, 7, 7, 1, 4, 8] [10, 5] [10, 1, 4] [8, 7] [8, 7] [8] 미션 6 : [6, 6, 4, 5, 2, 3, 3, 10, 6, 9] [6, 6, 2] [4, 5, 3, 3] [10] [6, 9] 미션 7 : [2, 6, 7, 2, 6, 3, 5, 10, 9, 8] [2, 6, 7] [2, 6, 3] [5, 10] [9] [8] 미션 8 : [3, 9, 6, 2, 6, 1, 7, 10, 8, 10] [3, 9, 2, 1] [6, 6] [7, 8] [10] [10] 미션 9 : [1, 3, 8, 6, 7, 6, 4, 2, 3, 3] [1, 3, 8, 2] [6, 7] [6, 4, 3] [3] 총 이동: 45총 이동: 44834
다양한 크기를 가진 물체들을 수레로 옮길 때에, 가능한 최소 횟수로 완료하는 알고리듬 과제입니다.
참여자가 문제에 집중할 수 있도록, 메인코드를 제공하는 까닭에 언어를 python으로 제한했습니다.
물체는 10개이며 각 크기는 1~10의 랜덤값입니다. 수레의 크기는 15입니다.
10000번의 반복된 미션을 통해 총 이동횟수의 합을 출력합니다.
참여자는 아래 코딩예제에서 choose라는 함수를 재정의하여 이동횟수를 최적화하시기 바랍니다.
결과를 올리실 때에는 choose 함수 본문과, 메인코드 실행 시 출력결과를 포함하시면 됩니다.
물론 총 이동숫자가 작을 수록 좋은 알고리듬이겠습니다.
```{.python}
########## 아래 함수 choose 를 사용자가 재정의 #########
# 숫자 리스트 things의 숫자들 중,
# cartsize 크기의 수레에 실을 숫자들을 선택하여 리턴
########################################################
def choose(things, cartsize):
chosen = []
chosen_size = 0
for thing in things:
if chosen_size+thing <= cartsize:
chosen.append(thing)
chosen_size += thing
return chosen
############## 아래 본문은 그대로 재사용 ###################
import random
# total_moves 초기화
total_moves = 0
# 총 10000회 시행
for mission in range(10000):
# 10개의 물건들이 각각 1~10 크기로 무작위 생성됨
things = []
for i in range(10):
things.append(random.randrange(1,11))
# print('미션', mission, ':', things)
# 이것들을 크기 15인 수레로 가능한 적은 회수로 이동
while len(things)>0:
chosen = choose(things, 15)
# print(chosen)
for thing in chosen:
things.remove(thing)
total_moves += 1
print('총 이동:', total_moves)
```
정답 댓글은 아래와 같은 예로 넣으시면 됩니다.
```{.python}
def choose(things, cartsize):
chosen = []
chosen_size = 0
for thing in things:
if chosen_size+thing <= cartsize:
chosen.append(thing)
chosen_size += thing
return chosen
```
미션 0 : [10, 5, 7, 9, 3, 2, 1, 10, 9, 4] [10, 5] [7, 3, 2, 1] [9, 4] [10] [9] 미션 1 : [1, 1, 1, 7, 5, 8, 6, 8, 2, 6] [1, 1, 1, 7, 5] [8, 6] [8, 2] [6] 미션 2 : [9, 8, 4, 7, 10, 3, 4, 1, 6, 3] [9, 4, 1] [8, 7] [10, 3] [4, 6, 3] 미션 3 : [10, 10, 4, 3, 10, 9, 8, 2, 1, 5] [10, 4, 1] [10, 3, 2] [10, 5] [9] [8] 미션 4 : [4, 2, 5, 1, 4, 7, 5, 6, 6, 6] [4, 2, 5, 1] [4, 7] [5, 6] [6, 6] 미션 5 : [10, 5, 10, 8, 8, 7, 7, 1, 4, 8] [10, 5] [10, 1, 4] [8, 7] [8, 7] [8] 미션 6 : [6, 6, 4, 5, 2, 3, 3, 10, 6, 9] [6, 6, 2] [4, 5, 3, 3] [10] [6, 9] 미션 7 : [2, 6, 7, 2, 6, 3, 5, 10, 9, 8] [2, 6, 7] [2, 6, 3] [5, 10] [9] [8] 미션 8 : [3, 9, 6, 2, 6, 1, 7, 10, 8, 10] [3, 9, 2, 1] [6, 6] [7, 8] [10] [10] 미션 9 : [1, 3, 8, 6, 7, 6, 4, 2, 3, 3] [1, 3, 8, 2] [6, 7] [6, 4, 3] [3] 총 이동: 45총 이동: 44834