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
no image
[알고리즘 일기] 7. 이진 탐색 구현 알고리즘
​ 이진 탐색 구현 알고리즘 이진 탐색 알고리즘은 선형 탐색 알고리즘과 달리, 정렬된 리스트를 전제로 합니다. 정렬된 리스트가 아니면 이 알고리즘은 적용이 불가능합니다. ​ ​ 주의사항 * 1회 비교를 거칠 때마다 탐색 범위가 (대략) 절반으로 줄어듭니다. ​ ​ ❧ 테스트 셋 def binary_search(element, some_list): # Code print(binary_search(2, [2, 3, 5, 7, 11])) print(binary_search(0, [2, 3, 5, 7, 11])) print(binary_search(5, [2, 3, 5, 7, 11])) print(binary_search(3, [2, 3, 5, 7, 11])) print(binary_search(11, [2, ..
2021.05.07
no image
[알고리즘 일기] 6. 선형 탐색 구현 알고리즘
​ ​ 선형 탐색 구현 알고리즘 선형 탐색이란, 리스트의 처음부터 끝까지 순서대로 하나씩 탐색을 진행하는 알고리즘입니다. ​ ​ 주의사항 * element in some_list와 같이 in 키워드를 사용하는 건 안 됩니다. ​ ​ ❧ 테스트 셋 def linear_search(element, some_list): # Code #Test print(linear_search(2, [2, 3, 5, 7, 11])) print(linear_search(0, [2, 3, 5, 7, 11])) print(linear_search(5, [2, 3, 5, 7, 11])) print(linear_search(3, [2, 3, 5, 7, 11])) print(linear_search(11, [2, 3, 5, 7, 11]..
2021.05.06
no image
[알고리즘 일기] 5. 하노이의 탑
하노이의 탑 이 게임의 목표는 왼쪽 기둥에 있는 원판들을 모두 오른쪽 기둥으로 옮기는 것입니다. 탐색을 재귀로 구현해보세요. 주의사항 * 한 번에 하나의 원판만 옮길 수 있습니다. * 큰 원판이 작은 원판 위에 있어서는 안 됩니다. ❧ 테스트 셋 def move_disk(disk_num, start_peg, end_peg): print("%d번 원판을 %d번 기둥에서 %d번 기둥으로 이동" % (disk_num, start_peg, end_peg)) def hanoi(num_disks, start_peg, end_peg): # Code # Test hanoi(3, 1, 3) - num_disks : 원판 수 - start_peg : 게임을 시작하는 기둥 번호 - end_peg : 목표로 하는 기둥 번호 ..
2021.05.05
no image
[알고리즘 일기] 4. 이진 탐색 구현 알고리즘(재귀)
이진 탐색 구현 알고리즘(재귀) 이진 탐색을 재귀로 구현해보세요. 주의사항 * 반드시 재귀(recursion)의 개념을 사용해야 합니다. ❧ 테스트 셋 def binary_search(element, some_list, start_index=0, end_index=None): # end_index's default value if end_index == None: end_index = len(some_list) - 1 # Code print(binary_search(2, [2, 3, 5, 7, 11])) print(binary_search(0, [2, 3, 5, 7, 11])) print(binary_search(5, [2, 3, 5, 7, 11])) print(binary_search(3, [2, 3,..
2021.05.04
no image
[알고리즘 일기] 3. 숫자 합, 자릿수 합
숫자 합 n번째 삼각수(triangle number)는 자연수 1부터 n까지의 합입니다. 파라미터로 정수값 n을 받고 n번째 삼각수를 리턴해주는 재귀 함수 triangle_number를 쓰세요. n은 1 이상의 자연수라고 가정합니다. 주의사항 * 함수 안에 반복문은 쓰면 안됩니다. ❧ 테스트 셋 # Return sum 1 to n def triangle_number(n): # Code # Test for i in range(1, 11): print(triangle_number(i)) ❧ 출력 예시 1 3 6 10 15 21 28 36 45 55 ❧ 정답 # Return sum 1 to n def triangle_number(n): if (n == 1): return 1 else: return n + tr..
2021.05.03