본문 바로가기

728x90

그 땐 Algorithm했지

(56)
[TAVE/이코테] ch08 다이나믹 프로그래밍 | 개념 정리 참고자료: 이것이 코딩테스트다 중복되는 연산을 줄이자 📌동적 계획법이라고도 하며 메모리 공간을 약간 더 사용해 연산 속도를 비약적으로 증가시키는 방법이다. 👉🏻다이나믹 프로그래밍으로 해결할 수 있는 대표적인 예시로 피보나치 수열이 있다. 파이썬에서 이러한 수열을 배열이나 리스트로 표현할 수 있다. 📌피보나치 수열: 이전 두 항의 합을 현재의 항으로 설정하는 특징이 있는 수열 👉🏻점화식: \( a_{n+2} = f(a_{n+1}, a_n) = a_{n+1}, a_n )\ n번째 피보나치 수 = (n-1)번째 피보나치 수 + (n-2)번째 피보나치 수 단, 첫번째와 두번째 피보나치 수 = 1 👉🏻위의 점화식을 프로그래밍을 표현하려면 재귀 함수를 사용하면 간단하다. def fibo(x): if x == 1 o..
[self-study/level 3] SQL | 없어진 기록 찾기 | JOIN 문제 내 풀이 SELECT OUTS.ANIMAL_ID, OUTS.NAME FROM ANIMAL_OUTS AS OUTS LEFT JOIN ANIMAL_INS AS INS ON OUTS.ANIMAL_ID = INS.ANIMAL_ID WHERE INS.ANIMAL_ID IS NULL; 👉🏻JOIN: 두 테이블을 공유하고 있는 컬럼(PK or FK)으로 연결하여 하나의 테이블처럼 만든다. 이 문제에서 조건은 ANIMAL_ID이다. 👉🏻LEFT JOIN: JOIN을 기준으로 왼쪽 테이블을 모두 선택한다. (공통적인 부분 + 왼쪽 테이블에만 존재하는 부분) 👉🏻ON: 두 테이블간의 공유하고 있는 컬럼을 명시한다. ✍🏻ANIMAL_OUTS(왼쪽 테이블)를 두고 LEFT JOIN을 사용한 다음 ANIMAL_INS(오른..
[self-study/level 2] SQL | NULL 처리하기 | IS NULL 문제 내 풀이 SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID 👉🏻NULL값을 처리할 때 IFNULL을 사용한다. 파라미터로 NULL이 나올 필드와 해당 NULL을 어떻게 표시할 지 정해준다. ✍🏻IFNULL구문을 ORDER BY 아래에 사용하니 오류가 났다! SELECT 구문 안 쪽에 사용해야 할 것 같다.
[self-study/level 1] SQL | 이름이 있는 동물의 아이디 | IS NULL 문제 내 풀이 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME is not NULL ORDER BY ANIMAL_ID ASC 👉🏻is not NULL은 값이 있는 필드를 찾아준다.
[TAVE/이코테] ch07 이진 탐색 | 실전 문제 참고자료: 이것이 코딩테스트다 실전 - 부품 찾기 store_component_count = int(input()) store_component = list(map(int, input().split())) customer_component_count = int(input()) customer_component = list(map(int, input().split())) #정렬 store_component.sort() customer_component.sort() def binary_search(start, end, goal): mid = end // 2 if goal == store_component[start]: return start elif goal == store_component[mid]: re..
[TAVE/이코테] ch07 이진 탐색 | 개념 정리 참고자료: 이것이 코딩테스트다 순차 탐색 📌리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법이다. 시간만 충분하다면 항상 원하는 원소를 찾을 수 있다. n, target, array = 5, Dongbin, [Hanul, Jonggu, Dongbin, Taeil, Sangwook] def sequential_search(n, target, array): #각 원소를 하나씩 확인하며 for i in range(n): #현재의 원소가 찾고자 하는 원소와 동일한 경우 if array[i] == target: return i + 1 #현재 위치 반환 👉🏻해당 코드는 순차 탐색을 구현한 것이다. 앞에서부터 원소를 하나씩 확인하기 때문에 데이터의 개수가 N이라면 최악의 ..
[TAVE/이코테] ch06 정렬 | 실전 문제 참고자료: 이것이 코딩테스트다 실전 - 위에서 아래로 data_count = int(input()) data_list = [] for _ in range(data_count): data_list.append(int(input())) data_list = sorted(data_list, reverse = True) for data in data_list: print(data, end = ' ') 👉🏻가장 익숙한 정렬 라이브러리를 사용해보았다. data_list에 숫자를 받아 저장한다. sorted를 이용해 정렬한다. 이 때 reverse = True로 설정하면 내림차순으로 정렬할 수 있다. 마지막으로 for문을 이용해 출력했다. end = ' ' 를 이용해 각 숫자를 공백으로 구분했다. 실전 - 성적이 낮..
[TAVE/이코테] ch06 정렬 | 개념 정리 참고자료: 이것이 코딩테스트다 정렬 알고리즘 개요 📌정렬: 데이터를 특정한 기준에 따라서 순서대로 나열한다. 이진 탐색의 전처리 과정이기도 하다. 💡 다음 카드를 오름차순으로 정렬하자. [7] [5] [9] [0] [3] [1] [6] [2] [4] [8] ✅선택 정렬 사용 📌선택 정렬: 가장 작은 것을 선택한다. 👉🏻가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복한다. array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i for j in range(i + 1, len(array)): if array[min_index] > arr..

728x90