no image
[알고리즘 일기] 16. 퀵 정렬(3)
퀵 정렬(3) 이전에 작성한 quicksort 함수를 파라미터 하나만을 이용해서 작성하시오. ❧ Before # Test test_list = [9, 5, 1, 5, 2, 8, 2, 7, 1, 3, 6, 2, 4, 7, 10, 11, 4, 6] quicksort(test_list, 0, len(test_list) - 1) print(test_list) ❧ After # Test test_list = [9, 5, 1, 5, 2, 8, 2, 7, 1, 3, 6, 2, 4, 7, 10, 11, 4, 6] quicksort(test_list) # start, end 파라미터 없이 호출 print(test_list) ❧ 정답 def swap_elements(my_list, index1, index2): tmp =..
2021.05.16
no image
[알고리즘 일기] 15. 퀵 정렬(2)
퀵 정렬(2) Divide and Conquer 방식으로 quicksort 함수를 써 보세요. quicksort는 파라미터로 리스트 하나와 리스트 내에서 정렬시킬 범위를 나타내는 인덱스 start와 인덱스 end를 받습니다. merge_sort 함수와 달리 quicksort 함수는 정렬된 새로운 리스트를 리턴하는 게 아니라, 파라미터로 받는 리스트 자체를 정렬시키는 것입니다. ❧ 테스트 셋 def swap_elements(my_list, index1, index2): tmp = my_list[index1] my_list[index1] = my_list[index2] my_list[index2] = tmp return my_list # partition fuction def partition(my_list..
2021.05.15
no image
[알고리즘 일기] 14. 퀵 정렬(1)
퀵 정렬(1) 퀵 정렬의 partition 함수를 작성하세요. partition 함수는 리스트 my_list, 그리고 partition할 범위를 나타내는 인덱스 start와 인덱스 end를 파라미터로 받습니다. my_list의 값들을 pivot 기준으로 재배치한 후, pivot의 최종 위치 인덱스를 리턴해야 합니다. ❧ 테스트 셋 # helper function def swap_elements(my_list, index1, index2): tmp = my_list[index1] my_list[index1] = my_list[index2] my_list[index2] = tmp return my_list # partition function def partition(my_list, start, end): ..
2021.05.15
no image
[알고리즘 일기] 13. 합병 정렬(2)
합병 정렬 구현하기 Divide and Conquer 방식으로 merge_sort 함수를 써 보세요. merge_sort는 파라미터로 리스트 하나를 받고, 정렬된 새로운 리스트를 리턴합니다. ❧ 테스트 셋 def merge(list1, list2): merge_list = [] i = 0 j = 0 while i < len(list1) and j < len(list2): if(list1[i] < list2[j]): merge_list.append(list1[i]) i+=1 else: merge_list.append(list2[j]) j+=1 if (i == len(list1)): return merge_list + list2[j:] else: return merge_list + list1[i:] retu..
2021.05.13
no image
[알고리즘 일기] 12. 합병 정렬(1)
합병 정렬 합병 정렬 알고리즘 중 사용되는 merge 함수를 작성하시오. 주의사항 * merge 함수는 정렬된 두 리스트 list1과 list2를 받아서, 하나의 정렬된 리스트를 리턴합니다. ❧ 테스트 셋 def merge(list1, list2): # Code # Test print(merge([1],[])) print(merge([],[1])) print(merge([2],[1])) print(merge([1, 2, 3, 4],[5, 6, 7, 8])) print(merge([5, 6, 7, 8],[1, 2, 3, 4])) print(merge([4, 7, 8, 9],[1, 3, 6, 10])) ❧ 출력 예시 [1] [1] [1, 2] [1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4..
2021.05.12
no image
[알고리즘 일기] 11. 1부터 n까지의 합
1부터 n까지의 합 분할 정복 방식을 사용하여 1부터 n까지 더하는 함수를 작성하시오. 주의사항 * 함수는 두 개의 정수 인풋 start와 end를 받고, start부터 end까지의 합을 리턴합니다. end는 start보다 크다고 가정합니다. ❧ 테스트 셋 def consecutive_sum(start, end): #code #Test print(consecutive_sum(1, 10)) print(consecutive_sum(1, 100)) print(consecutive_sum(1, 253)) print(consecutive_sum(1, 388)) ❧ 출력 예시 55 5050 32131 75466 ❧ 정답 def consecutive_sum(start, end): if start == end: ret..
2021.05.11
no image
[알고리즘 일기] 10. 강남역 폭우
강남역 폭우 강남역에 엄청난 폭우가 쏟아진다고 가정합시다. 정말 재난 영화에서나 나올 법한 양의 비가 내려서, 고층 건물이 비에 잠길 정도입니다. 그렇게 되었을 때, 건물과 건물 사이에 얼마큼의 빗물이 담길 수 있는지 알고 싶은데요. 그것을 계산해 주는 함수 trapping_rain을 작성해 보려고 합니다. 함수 trapping_rain은 건물 높이 정보를 보관하는 리스트 buildings를 파라미터로 받고, 담기는 빗물의 총량을 리턴해 줍니다. trapping_rain([3, 0, 0, 2, 0, 4]) 리턴값 : 10 trapping_rain([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]) 리턴값 : 6 ❧ 테스트 셋 def trapping_rain(buildings): #Code..
2021.05.10
no image
[알고리즘 일기] 9. 가까운 매장 찾기
가까운 매장 찾기 ★벅스는 줄어든 매출 때문에 지점 하나를 닫아야 하는 위기에 처해 있습니다. 어떤 지점을 닫는 게 회사에 타격이 적을지 고민이 되는데요. 서로 가까이 붙어 있는 매장이 있으면, 그 중 하나는 없어져도 괜찮지 않을까 싶습니다. 사장님은 비서에게, 직선 거리가 가장 가까운 두 매장을 찾아서 보고하라는 임무를 주셨습니다. 설명 튜플은 각 매장의 위치를 x, y 좌표로 나타낸 것입니다. 0번 매장은 (2, 3)에, 그리고 1번 매장은 (12, 30) 위치에 있는 거죠. 함수 closest_pair는 이 좌표 리스트를 파라미터로 받고, 리스트 안에서 가장 가까운 두 매장을 [(x1, y1), (x2, y2)] 형식으로 리턴합니다. 참고로 이미 두 좌표 사이의 거리를 계산해 주는 함수 distan..
2021.05.09
no image
[알고리즘 일기] 8. 카드 뭉치 최대 조합
​ 카드 뭉치 최대 조합 카드 두 뭉치가 있습니다. 왼쪽 뭉치에서 카드를 하나 뽑고 오른쪽 뭉치에서 카드를 하나 뽑아서, 나온 두 수의 곱 중 가장 큰 값을 구하시오. ​ ​ ​ ​ ❧ 테스트 셋 def max_product(left_cards, right_cards): # Code # Test print(max_product([1, 6, 5], [4, 2, 3])) print(max_product([1, -9, 3, 4], [2, 8, 3, 1])) print(max_product([-1, -7, 3], [-4, 3, 6])) ❧ 출력 예시 24 32 28 ❧ 정답 Try 1 def max_product(left_cards, right_cards): max_value = left_cards[0] * r..
2021.05.08