본문 바로가기

TIL

(32)
[TIL]20220605 ORM ORM (Object-relational mapping) 이란 객채와 관계형 데이터의 데이터들을 자동으로 연결 해주는것을 말한다. (주로 프레임 워크나 툴들을 통해) . 관계형 데이터 베이스 (SQL) 들은 정형화 되고 간단한 값의 데이터를 입력 받아야 하는데, 우리가 사용하는 많은 프로그램(OOP)/어플리케이션 들은 주로 객체를 다룬다. 이 객체들의 저장과 추출(setter/getter)을 도와주는 기능이다. 단순하게 get/set만 해주는게 목적이 아니라 객체지향적인 시스템을 위해서 관계형 데이터베이스의 설계부터 변화를 주고, 설계된 데이터베이스와 객체와의의 관계에 대한 설정 등을 포함하여 보다 객체지향적인 시스템의 완성을 위한 도구이다. 장점: 객체 지향적인 코드로 인해 더 직관적이고 비즈니..
[TIL]20220604 CS 스터디 챕터28: 구글같은 서비스는 어떻게 개발할까? 라이브러리 우리는 라이브러리라고 하면 보통 '도서관'을 떠올린다. 책장이 잔뜩 들어서고 책장에는 책이 가득한 건물을 우리는 도서관이라고 부른다. '관'이라는 한자 자체가 건물을 뜻한다. 그래서 '라이브러리'하고 하면 우리는 커다란 건물을 떠올리게 되고 여기에서 영어 뉘앙스와 약간의 차이가 발생한다. 영어로도 library라고 하면 보통 도서관 건물을 뜻하긴 한다. 그러나 뉘앙스상 초점은 외형적인 건물이 아니라 안에 들어찬 책들에 더 맞춰진다. 라틴어 libre에서 파생된 library는 책들의 집합에 가까운 뜻을 지녔다. 그러니까 건물이 아니더라도 서적들이 모여있으면 라이브러리에 해당하는 셈이다. 프로그래밍에서 말하는 라이브러리(library)에..
[TIL]20220603 CS 스터디 챕터27: 작문과 비슷한 프로그래밍 프로그래밍 언어와 역사 1950년대 최초의 High-Level 프로그래밍 언어 등장 포트란 (Fortan) 1950년대 중반 등장한 최초의 고급 언어 출시 당시에는 과학적 계산을 위해 고안되었고 이후에도 과학적 응용 분야에 이용되고 이후에 다목적 프로그래밍을 위해 다른 언어의 특성을 추가한 버전으로 업데이트 되었다. program hello implicit none write(*,*) 'Hello world!' end program hello 코볼 (COBOL) 미 국방성에서 개발된 고급언어로 사용자들이 쉽게 읽고 이해하는데 초점을 맞춘 언어. 레코드 구조, 자료 구조와 실행 부분의 분리, 출력 양식의 가변성과 같은 특징을 지녔다 IDENTIFICATION..
[TIL]20220602 CS 스터디 챕터26: 고수준 언어에서 프로그램 실행까지 알고리즘 다이나믹 프로그래밍 동적 계획법(Dynamic Programming)이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 이것은 부분 문제 반복과 최적 부분 구조를 가지고 있는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. 여러 개의 하위 문제를 풀고 그 결과를 기록하고 이용해 문제를 해결하는 알고리즘. 즉, 우리가 재귀함수를 풀어나갈 때 많이 했던 함수의 수식화를 시키면 됩니다. F(string) = F(string[1:n-2] 라고 수식을 정의했던 것 처럼, 문제를 쪼개서 정의할 수 있으면 동적 계획법을 쓸 수 있다. 그러나 재귀와 다른 점은, 그 결과를 기록하고 이용한다는 점. 여기서 결과..
[TIL]20220601 CS 스터디 챕터 24: 알고리즘은 이상, 프로그래밍은 현실, 챕터 25: 다른 프로그램을 처리하기 위한 프로그램 알고리즘 추상적이고 이상적인 절차를 기술한 것. 어떤 문제의 해결을 위해 필요한 절차를 기술한 것이다. 그 절차나 방법을 이해할 수 있다면 어떤 방법으로도 기술할 수 있다. 입력이 있어야 한다. 결과를 구할 수 있어야 한다. 각 단계(방법)는 명백하고 모호하지 않아야 한다. 순서대로 실행을 할 수 있고, 실행이 종료되어야 한다. 모든 절차는 오류 없이 실행되어야 한다. 프로그램 실제 컴퓨터가 과제를 완료하기 위해 수행해야 하는 모든 단계를 구체적으로 서술한다. 즉, 컴퓨터가 어떤 일을 처리할 수 있게 하는 명령어의 집합을 말한다. 하나 이상의 알고리즘이 컴퓨터가 직접 처리할 수 있는 형태로 ..
[TIL]20220531 CS 스터디 챕터22 :10 개 도시를 최단거리로 여행하는 법 P-NP 문제는 어떤 문제가 주어졌을 때 어렵다, 쉽다를 결정하는 기준점 을 제시한다. P - NP문제는 수학계의 최대 난제인 7대 밀레니엄 문제 중 하나이다. P=NP를 증명하거나, P!=NP를 증명하게 되면, 약 12억의 상금과 튜링상 수상 및 모든 컴퓨터과학 업계를 뒤흔들 수 있다. P 어떤 문제가 주어졌을 때 다항식으로 표현되어 polynomical time 즉, 다항 시간내에 해결 가능한 알고리즘을 의미하며 알고리즘의 복잡도가 O(nk)로 표현되는 문제를 'P'라 한다. 문제를 푸는데 걸리는 시간이 다항식으로 표현가능한 문제 (O(n^2), O(n^3)같이 O(n^k), O(n*log(n)). 복잡도 O(n^k) 이하를 가지는 경우 ..
[TIL]20220530 CS 스터디 이진 탐색 오름차순으로 정렬된 배열에서 원하는 숫자(target)을 찾는 알고리즘입니다. 스무고개 시간 복잡도 = O(log(n)) 배열 전체의 중간값을 target 값과 비교 중간값이 target 값보다 크면 왼쪽 부분만 선택 왼쪽부분의 중간값을 다시 target과 비교 def binary_search(nums, target): def bs(start, end): if start > end: return -1 mid = (start + end) // 2 if nums[mid] target: return bs(start, mid - 1) else: return mid return bs(0, len(nu..
[TIL]20220529 힙 (Heap) 힙은 데이터에서 최댁값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리. 항상 큰 값이 상위 레벨에 있고 작은 값이 하위레벨에 있도록 한다(최대힙). 최소힙의 경우 최솟값이 맨 위 레벨에 있다. 최대힙의 구현 class BinaryMaxHeap: def __init__(self): # 계산 편의를 위해 0이 아닌 1번째 인덱스부터 사용한다. self.items = [None] def __len__(self): # len() 연산을 가능하게 하는 매직 메서드 덮어쓰기(Override). return len(self.items) - 1 def _percolate_up(self): # percolate: 스며들다. cur = len(self) # left 라면 2*cur, right 라면 ..