본문 바로가기

분류 전체보기

(172)
[알고리즘] 이진 탐색 (Binary Search) 이진 탐색 이란? 탐색할 자료를 둘로 나누어 해당 데이터가 있을만한 곳을 탐색하는 방법 오름차순으로 정렬되어 있어야 한다 파이썬 코드 구현 def binary_search(data, search): print(data) if len(data) == 1 and search == data[0]: return True if len(data) == 1 and search != data[0]: return False if len(data) == 0: return False medium = len(data) // 2 if search == data[medium]: return True else: if search > data[medium]: return binary_search(data[medium+1:], sea..
[알고리즘] 퀵 정렬 (quick sort) 퀵 정렬 이란? 기준점(pivot)을 정해서 기준점보다 작은 데이터는 왼쪽(left), 큰 데이터는 오른쪽(right)으로 모으는 함수를 작성 각 왼쪽(left), 오른쪽(right)은 재귀용법으로 다시 동일 함수를 호출하여 반복함 왼쪽(left) + 기준점(pivot) + 오른쪽(right) 을 return 파이썬 코드 구현 def qsort(data): if len(data) item ] right = [ item for item in data[1:] if pivot
[알고리즘] 병합 정렬 (merge sort) 병합 정렬이란? 재귀용법을 활용한 정렬 알고리즘 리스트를 절반으로 자르고 비슷한 두개의 리스트로 나눈다 (나누고나누고..) 각 부분 리스트를 재귀적으로 합병정렬을 이용해 정렬한다 두 개 리스트를 다시 하나의 정렬된 리스트로 합병한다 ex) data_list = [1, 9, 3, 2] 먼저 [1,9]와 [3,2]로 나눈다 앞부분은 [1]과 [9]로 나눈다 정렬해서 합친다 [1,9] 뒷부분은 [3]과 [2]로 나눈다 정렬해서 합친다 [2,3] 비교하면서 [1,9]와 [2,3]을 합친다 1 2 : [1,2] 9 > 3 : [1,2,3] 9 : [1,2,3,9] 코드 구현 def merge(left, right): merged = list() left_point, right_point ..
[알고리즘] DP (동적계획법) DP(Dynamic Programming) 란? 입력 크기가 작은 부분문제들을 해결하고 난 후, 이것을 활용하여 큰 크기의 부분문제를 해결, 최종적으로 전체문제를 해결 상향식 접근법임 - 가장 최하위 해답을 구한 후, 이를 이용해서 상위 문제를 풀어가는 방식 Memorization 기법을 사용 - 이전에 계산한 값을 저장하여, 다시 계산하지 않도록 해서 전체 실행속도 빠르게 재귀 vs 동적계획법 n을 입력받았을 때 피보나치 수열로 결과값을 출력하시오 #재귀호출 def fibo(num): if num
[알고리즘] 백준 1236 성지키기 n, m = map(int, input().split(' ')) arr = [] for _ in range(n): arr.append(input()) row = [0] * n col = [0] * m for i in range(n): for j in range(m): if arr[i][j] == 'X': row[i] = 1 col[j] = 1 row_count, col_count = 0, 0 for i in row: if i == 0: row_count += 1 for i in col: if i == 0: col_count += 1 print(max(row_count,col_count)) 배열에 문자열을 n번 append하면 이차원배열 형식으로 접근가능하다는,, arr.append('abcd') arr...
[알고리즘] 백준 1668 트로피진열 def display(arr): count = 1 now = arr[0] for i in range(1,len(arr)): if now 4 2
[알고리즘] 백준 1302 베스트셀러 n = int(input()) book_list = {} for _ in range(n): book = input() if book in book_list: book_list[book] += 1 else: book_list[book] = 1 target = max(book_list.values()) array = [] for k, v in book_list.items(): if v == target: array.append(k) book_max = [] book_max = sorted(array) print(book_max[0])
[알고리즘] 백준 1568 새 n = int(input()) k = 1 count = 0 while n > 0: if n < k: k = 1 else: n -= k k += 1 count += 1 print(count)