정렬 데이터를 특정 기준에 따라 순서대로 나열하는 것 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬이 있다. 선택 정렬 가장 기본적인 정렬 알고리즘으로 가장 작은 것을 왼쪽으로 계속 보내는 (오름차순의 경우) 정렬 방식 arr = [7, 3, 5, 9, 6, 2] for i in range(len(arr)): min_idx = i for j in range(i+1, len(arr)): if arr[min_idx] > array[j]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] 시간 복잡도가 $ O(N^2) $ 이기 때문에 원소의 개수가 많으면 효율적이지 못한 알고리즘이다... 삽입 정렬 특정한 데이터를 적절한 위치에 삽입한다는 의미의 삽입 정렬이다..
선행 개념 스택, 큐, 재귀 개념을 먼저 공부하고 들어가자. Stack 스택은 박스 쌓기로 생각하면 편하다. 나중에 쌓인 것이 가장 먼저 들릴 수 있는 것처럼, 이러한 구조를 LIFO(Last In First Out)라 한다. 파이썬에서는 리스트로 스택을 구현할 수 있다. stack = [] stack.append(1)# [1] stack.append(2)# [1, 2] stack.append(3)# [1, 2, 3] stack.pop()# [1, 2] stack.append(4)# [1, 2, 4] pop() 메소드는 가장 뒤의 데이터를 제거하고, append는 가장 뒤에 데이터를 삽입한다. 백준 10828 스택 import sys n = int(input()) stack = [] cmd = [sys...
구현(Implementation) 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 - 논리적 사고력이 중요 사실 모든 문제가 구현 문제가 아닐까...? 구현 문제풀이 백준 1009 분산처리 문제 이해가 좀 헷갈렸다. 시간 초과가 자꾸 떠서... 왜그럴까 생각해보니까 9^635같은 큰 숫자가 들어오면 당연히 시간초과가 날 만 하더라. - 초기 코드 t = int(input()) computer = [0] * t for i in range(t): computer[i] = list(map(int, input().split())) ans = [0] * t for i in range(len(computer)): tmp = computer[i][0] ** computer[i][1] ans[i] = int(str(t..
그리디 알고리즘에 대해 공부해보자. Greedy = 탐욕 = 현재 상황에서 가장 좋은 것만을 선택하는 방법 그리디 예시 - 거스름돈 거스름돈을 거슬러 줄 때 최소 동전(지폐 포함) 개수를 구하는 방법 = '가장 큰 화폐 단위' 부터 거슬러주는 방법이다. 어떻게 구현할 수 있을까? changes = 14570# 거스름돈 count = 0# 거스름돈 화폐 개수 money_types = [10000, 5000, 1000, 500, 100, 50, 10] for money in money_types: count += changes // money changes %= money print(count) 그리디 문제점 현재 상황에서 가장 좋은 것 = 전체 상황에서 가장 좋은 것?아니다. 부분 최적해는 구할 수 있지만..