알고리즘
-
Algorithm Note
Dynamic Programming(DP) 알고리즘 - 동적프로그래밍, Python으로 푸는 피보나치
Dynamic Programming 큰 문제를 나누어 작은 문제로 푸는 것 하나의 문제는 단 한 번의 풀이만 한다. Dynamic Programming 과 Recursion(재귀)의 차이점 DP와 재귀는 얼핏보면 '같은 문제가 반복적으로 일어나는 점' 에서 비슷하다고 생각할 수 있다. 하지만, 큰 차이점은 일반적인 재귀를 단순히 사용하면 동일한 작은 문제들이 여러 번 반복 되어 비효율적인 계산될 수 있다는 것이다. 가장 대표적인 예시는 피보나치 함수이다. DP 조건 두 가지 조건을 만족해야 한다. 1. 같은 문제가 반복적으로 발생 2. 최적 부분 구조 동일한 작은 문제들이 반복적으로 일어날 때, 같은 문제는 항상 정답도 같다. 즉, 중복 사용이 가능하다. DP 문제 풀이 방법 모든 작은 문제는 한 번..
-
Algorithm Note
알고리즘 - Greedy (탐욕 알고리즘, 욕심쟁이 알고리즘), 최적해 찾기
Greedy Alogrithm Greedy는 사전적인 의미로 '탐욕스러운', '욕심많은' 이라는 뜻을 가지고 있다. 탐욕 알고리즘 또는 욕심쟁이 알고리즘 라고도 불린다. 미래를 생각하지 않고 선택의 순간마다 당장 눈앞에 보이는 최적의 선택을 하는 기법 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘 그리디 알고리즘 해결 방법 선택 : 현재 상태에서 최적의 해답 선택 적절성 검사 : 선택된 답이 문제의 조건을 만족하는 지 확인 해답 검사 : 원래의 문제가 해결되었는지 검사하고, 해결되지 않았다면 선택 절차로 돌아가 위의 과정을 반복한다. 그리디 알고리즘 조건 그리디 알고리즘을 적용하기 위해서는 2가지 조건을 성립해야 한다. 1. 탐욕적 선택 속성 (Greedy Choice Prop..
-
Algorithm Note
알고리즘 - Stack, Queue (선형 큐, 원형 큐, 알고리즘 코드)
스택 '먼저 들어간 것이 나중에 나오는 자료구조' Last In First Out (LIFO) 구조이다. 스택은 배열과 연결 리스트로 나타낼 수 있다. 스택의 구성 - 상단 (top) : 스택에서 제일 나중에 입력된 데이터의 위치 - 하단 (bottom) : 스택에서 제일 먼저 입력된 데이터의 위치 - 요소 (element) : 스택에 저장되는 데이터 그 자체 - 공백 (empty stack) : 아무런 데이터도 갖고 있지 않은 스택 스택의 연산 push() : 스택에 데이터를 추가한다. pop() : 스택에서 데이터를 삭제한다. is_empty(s) : 스택이 공백상태인지 검사한다. is_full(s) : 스택이 포화상태인지 검사한다. create() : 스택을 생성한다. peek(s) : 요소를 스택..
조회수가 많은 글
-
Algorithm Note
Union-find 알고리즘 (Disjoint Set), 서로소 집합
Disjoint Set이란? 서로 중복되지 않은 부분 집합들로 나누어진 원소들에 대한 정보를 저장하고 조작하는 자료구조이다. 상호 배타적인 부분 집합들로 나눠진 원소들에 대한 자료구조라고 생각하면 된다. 흔히 서로소 집합 자료구조 라고도 한다. Union-Find 란? Union-Find는 서로소 집합을 표현할 때 사용하는 알고리즘이다. 집합을 표현하는 방법으로는 배열, 연결리스트 등을 이용할 수 있다. 그 중 가장 효율적인 트리 구조를 이용하여 구현한다. 보통 MST의 크루스칼 알고리즘에서 사용된다. 트리를 이용한 집합의 처리 - 같은 집합의 원소들은 하나의 트리로 관리한다. (자식 노드가 부모 노드를 가리킴) - 트리의 루트를 집합의 대표 원소로 삼는다. Union-Find 연산 Make-Set(x)..
-
9oormthon Challenge
[구름톤 챌린지 - 9oormthon Challenge] Day 15 과일 구매 - Python 파이썬 풀이
구름톤 챌린지 15일차 - 과일 구매 📜 문제 ✏️ 입력 ✏️ 출력 💡 풀이 그리디 알고리즘으로 풀 수 있는 이번 문제는 3주차에서 비교적 쉬운 문제였다. P(과일 가격), C(포만감)을 입력 받고, 각 과일의 조각마다 가지는 포만감을 value라고 정해 fruit 리스트에 한 번에 넣었다. 그리고 가격은 싸면서 포만감이 높아야하기 때문에 value를 기준으로 내림차순 정렬을 했다. N, K = map(int, input().split()) #N:과일의개수, K:가진돈 fruit=[] cnt = 0 for i in range(N) : P, C = map(int, input().split()) #P:각 과일의 가격, C:포만감 value = C // P fruit.append([P, C, value]) f..
-
🤖 Computer Vision
컴퓨터 비전 영상처리 - 컬러 Color (RGB, CIE, CMY, YCbCr, HSI, HSV 모델), 실습 코드 Python, openCV
Color 색상 : 색의 명칭, 색의 특성 명도 : 밝은 정도를 나타냄 채도 : 색이 선명하거나 탁한 정도를 나타냄 RGB 삼중 자극 이론 원추세포는 파장 630nm, 530nm, 450nm에 가장 민감하게 반응한다. 빛의 삼원색이며, 컬러 모니터(디스플레이)에 적합하다. RGB의 보색은 CMY이다. 직관적이지 않는다는 단점이 있다. 위의 RGB 영상에서의 변화처럼 빨간양말은 R영상에서 밝은 명암을 가지지만, G와 B영상에서는 어둡게 나타난다. 초록색 잔디는 G영상에서 밝은 명암을 가질 것이다. 흑백영상 grayscale을 RGB 영상으로 바꾸기 실습 코드 import cv2 # 흑백 영상 읽기 gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCAL..
-
9oormthon Challenge
[구름톤 챌린지 - 9oormthon Challenge] Day 9 폭탄 구현하기 2 - Python 파이썬 풀이
구름톤 챌린지 9일차 - 폭탄 구현하기 2 📜 문제 1번과 같은 그림에서 만약 (2, 2)에 폭탄이 떨어지면, 상하좌우를 탐색해야 한다. (3, 2)는 #이므로 아무것도 더하지 않는다. (2, 3)에 폭탄이 떨어지면, 상태가 '@'인 곳에는 2만큼 폭탄의 영향을 받는다. ✏️ 입력 ✏️ 출력 💡 풀이 문제에서 '상하좌우'를 보자마자 Graph 가 생각이 났다. 먼저 폭탄이 떨어지면 상하좌우로 영향을 받는다. 만약 (y, x)에 폭탄이 떨어지면 영향은 (y-1, x), (y, x-1), (y+1, x), (y, x+1)에 받는다. 좌표를 조금 더 쉽게 계산하기 위해 dx = [0, 1, -1, 0, 0] , dy = [0, 0, 0, 1, -1]로 하였다. #는 변화가 없고, '0'은 +1, '@'은 +2..
-
9oormthon Challenge
[구름톤 챌린지 - 9oormthon Challenge] Day 5 이진수 정렬
구름톤 챌린지 5일차 - 이진수 정렬 📜 문제 ✏️ 입력 ✏️ 출력 💡 풀이 10진수를 2진수로 변환하는 방법은 bin()을 사용한다. 반대로 2진수를 10진수로 변환하려면 int()를 사용한다. 먼저, numlist안에 있는 10진수들을 2진수로 변환하고, 여기서 1의 개수를 세기 위해 bin()과 count를 사용했다. 1의 개수가 같을 경우도 따져야 하기 때문에, bin_num에는 1의 개수와 10진수를 같이 추가해줬다. 내림차순으로 정렬을 하면서 K번째 10진수를 찾기 위해 index K-1의 1에서 출력을했다. #10진수를 2진수로 변경 -> bin() 사용 #1의 개수 : count() N, K = map(int, input().split()) numlist = list(map(int, inp..