일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- jdk17
- 계정계
- 컴퓨터공학학사취득
- 모놀리식
- 학점은행제무료강의
- 프로그래머스
- Pass By Value
- union
- 코어뱅킹
- jdk
- 맥북셋팅
- 학점은행제
- 맥북환경설정
- SQL
- Homebrew
- MSA
- 인강빨리듣기
- python
- DB
- 채널계
- 디렉토리계층구조
- 은행IT
- 렌탈스튜디오창업
- oracleapex
- 코딩테스트
- 맥북
- 개인프로필스튜디오창업
- fastapi
- it자격증
- 오라클
- Today
- Total
목록알고리즘 (43)
개발머해니
실습 설명 합병 정렬 알고리즘 중 사용되는 merge 함수를 작성해 보세요. merge 함수는 정렬된 두 리스트 list1과 list2를 받아서, 하나의 정렬된 리스트를 리턴합니다. 실습 결과 def merge(list1, list2): i = 0 j = 0 # 정렬된 항목들을 담을 리스트 merged_list = [] # list1과 list2를 돌면서 merged_list에 항목 정렬 while i list2[j]: merged_list.append(list2[j]) j += 1 else: merged_list.append(list1[i]) i += 1 # list2에 남은 항목이 있으면 정렬 리스트에 추가 if i ..
실습 설명 Divide and Conquer를 이용해서 1부터 n까지 더하는 과정을 코드로 한 번 구현해 봅시다. 우리가 작성할 함수 consecutive_sum은 두 개의 정수 인풋 start와 end를 받고, start부터 end까지의 합을 리턴합니다. end는 start보다 크다고 가정합니다. 실습 결과 def consecutive_sum(start, end): # base case if start == end: return start # 분할 mid = (start + end) // 2 # 정복 return consecutive_sum(start, mid) + consecutive_sum(mid+1, end) # 테스트 코드 print(consecutive_sum(1, 10)) print(cons..
실습 설명 런던에 엄청난 폭우가 쏟아진다고 가정합시다. 정말 재난 영화에서나 나올 법한 양의 비가 내려서, 고층 건물이 비에 잠길 정도입니다. 그렇게 되었을 때, 건물과 건물 사이에 얼마큼의 빗물이 담길 수 있는지 알고 싶은데요. 그것을 계산해 주는 함수 trapping_rain을 작성해 보려고 합니다. 함수 trapping_rain은 건물 높이 정보를 보관하는 리스트 buildings를 파라미터로 받고, 담기는 빗물의 총량을 리턴해 줍니다. 예를 들어서 파라미터 buildings로 [3, 0, 0, 2, 0, 4]가 들어왔다고 합시다. 그러면 0번 인덱스에 높이 3의 건물이, 3번 인덱스에 높이 2의 건물이, 5번 인덱스에 높이 4의 건물이 있다는 뜻입니다. 1번, 2번, 4번 인덱스에는 건물이 없습니..
실습 설명 스다벅스는 줄어든 매출 때문에 지점 하나를 닫아야 하는 위기에 처해 있습니다. 어떤 지점을 닫는 게 회사에 타격이 적을지 고민이 되는데요. 서로 가까이 붙어 있는 매장이 있으면, 그 중 하나는 없어져도 괜찮지 않을까 싶습니다. 사장님은 비서 태호에게, 직선 거리가 가장 가까운 두 매장을 찾아서 보고하라는 임무를 주셨습니다. 태호는 영업팀에서 매장들 좌표 위치를 튜플 리스트로 받아 왔습니다. # 예시 tuple 리스트 test_coordinates = [(2, 3), (12, 30), (40, 50), (5, 1), (12, 10), (3, 4)] 좌표로 나타낸 것입니다. 0번 매장은 (2, 3)에, 그리고 1번 매장은 (12, 30) 위치에 있는 거죠. 태호가 사용하려는 함수 closest_p..
실습 설명 카드 두 뭉치가 있습니다. 왼쪽 뭉치에서 카드를 하나 뽑고 오른쪽 뭉치에서 카드를 하나 뽑아서, 두 수의 곱이 가장 크게 만들고 싶은데요. 어떻게 하면 가장 큰 곱을 구할 수 있을까요? 함수 max_product는 리스트 left_cards와 리스트 right_cards를 파라미터로 받습니다. left_cards는 왼쪽 카드 뭉치의 숫자들, right_cards는 오른쪽 카드 뭉치 숫자들이 담겨 있고, max_product는 left_cards에서 카드 하나와 right_cards에서 카드 하나를 뽑아서 곱했을 때 그 값이 최대가 되는 값을 리턴합니다. def max_product(left_cards, right_cards): max_val = left_cards[0] * right_cards..
실습 설명 하노이의 탑 게임 아시나요? 이 게임의 목표는 왼쪽 기둥에 있는 원판들을 모두 오른쪽 기둥으로 옮기는 것입니다. 지켜야할 규칙은 두가지입니다. 한 번에 하나의 원판만 옮길 수 있다. 큰 원판이 작은 원판 위에 있어서는 안 된다. 하노이의 탑 게임의 해답을 출력해주는 함수 hanoi를 쓰세요. hanoi는 파라미터로 원판 수 num_disks, 게임을 시작하는 기둥 번호 start_peg, 그리고 목표로 하는 기둥 번호 end_peg를 받고, 재귀적으로 문제를 풀어 원판을 옮기는 순서를 모두 출력합니다. def move_disk(disk_num, start_peg, end_peg): print("%d번 원판을 %d번 기둥에서 %d번 기둥으로 이동" % (disk_num, start_peg, en..
실습 설명 파라미터로 리스트 some_list를 받고, 뒤집힌 리스트를 리턴해 주는 재귀 함수 flip을 쓰세요. 반복문은 쓰면 안됩니다! 전역변수를 잡아서 푸는 방법 : pop(), append() # 파라미터 some_list를 거꾸로 뒤집는 함수 flip_list = [] def flip(some_list): # 여기에 코드를 작성하세요 if len(some_list) == 0 : return flip_list flip_list.append( some_list.pop() ) return flip(some_list) # 테스트 코드 some_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] some_list = flip(some_list) print(some_list) 인덱싱 활용하기 #..
실습 설명 파라미터로 정수값 n을 받고 n의 각 자릿수의 합을 리턴해 주는 재귀함수 sum_digits를 작성하세요. 반복문을 쓰지 말고, 재귀(recursion)의 개념을 활용해 주세요! # n의 각 자릿수의 합을 리턴 def sum_digits(n): # 여기에 코드를 작성하세요 # v1.0 if n < 10: return n return n%10 + sum_digits(n//10) # v0.1 if n//10 == 0: return n return sum_digits(int(n/10)) + n%10 # 테스트 코드 print(sum_digits(22541)) print(sum_digits(92130)) print(sum_digits(12634)) print(sum_digits(704)) print(..
실습 설명 n번째 삼각수(triangle number)는 자연수 1부터 n까지의 합입니다. 파라미터로 정수값 n을 받고 n 번째 삼각수를 리턴해 주는 재귀 함수 triangle_number를 쓰세요. n은 11 이상의 자연수라고 가정합시다. 함수 안에 반복문은 쓰면 안됩니다! # 1부터 n까지의 합을 리턴 def triangle_number(n): # 여기에 코드를 작성하세요 if n == 1: return 1 return triangle_number(n-1)+n # 테스트 코드: triangle_number(1)부터 triangle_number(10)까지 출력 for i in range(1, 11): print(triangle_number(i)) 1 3 6 10 15 21 28 36 45 55 코드잇 ..
실습 설명 피보나치 수열이란 첫 번째 항과 두 번째 항이 11이고, 세 번째 항부터는 바로 앞의 두 항의 합으로 정의된 수열입니다. 예를 들어서 세 번째 항은 첫 번째 항(11)과 두 번째 항(11)을 더한 22이며, 네 번째 항은 두 번째 항(11)과 세 번째 항(22)을 더한 33이 될 것입니다. 이러한 방식으로 피보나치 수열의 첫 1010개 항은 11, 11, 22, 33, 55, 88, 1313, 2121, 3434, 5555입니다. 파라미터로 11 이상의 자연수 n을 받고, n번째 피보나치 수를 리턴하는 재귀 함수 fib를 쓰세요. 반복문은 쓰면 안됩니다! # n번째 피보나치 수를 리턴 def fib(n): # 여기에 코드를 작성하세요 if n < 3: return 1 return fib(n-1..