본문 바로가기

분류 전체보기

(103)
[TIL 2024. 04. 01] SQLAlchemy | MySQL DB 테이블 생성 1. SQLAlchemy SQLAlchemy는 파이썬에서 ORM을 사용할 수 있게 해주는 대표적인 툴킷이다. 여기서 말하는 ORM(Object Relational Mapping)이란 "객체와 데이터베이스의 관계를 매핑하는 것"을 말한다. 따라서 ORM을 사용하면 RDBMS에서 SQL로 직접 쿼리문을 작성하지 않아도 객체를 통해 원하는 작업을 할 수 있다. 엄밀히는 ORM은 코드에서 Class 객체를 선언함으로써, 데이터베이스의 스키마를 매핑하여 사용할 수 있다. ORM의 장점은 코드의 가독성이 높아지고, 코드의 재사용 및 유지보수가 용이해지는 것을 들 수 있다. Class 선언 시에 --repr--함수를 선언해서 사용할 수도 있지만, 꼭 선언할 필요는 없다. 이는 python에 존재하는 represent..
[TIL 2024.03. 29] 퀵 정렬 (w. 시간 복잡도) 퀵 정렬 퀵 정렬은 정렬 중에서도 힙 정렬, 병합 정렬 등과 함께 시간 복잡도가 빠른 편에 속하는 정렬 알고리즘이다. 퀵 정렬은 병합정렬 처럼 "분할정복" 방식을 사용하는 알고리즘이지만, 퀵 정렬과 병합정렬의 차이는 이 분할이 불균등한지, 균등한지이다. 그리고 퀵 정렬은 "in-place"한 알고리즘이다. 즉, 합병정렬처럼 새로운 배열과 이를 저장할 추가적인 공간을 필요로 하지 않는다. 퀵 정렬은 선택정렬, 버블정렬, 삽입정렬과 마찬가지로 정렬하고자 하는 배열내에서 모든 작업이 이뤄진다 또 퀵 정렬은 "불안정 정렬"이다. 불안정 정렬과 안정 정렬은 "중복된 값"의 처리를 어떻게 할지에 대한 것이다. 즉, 안정정렬은 중복된 값이 있을 때 이를 기존의 입력 순서와 동일하게 정렬하는 것인 반면 불안정 정렬은 ..
[TIL 2024. 03. 28] 해시테이블과 해시충돌 해시테이블 (Hash Table) 해시테이블은 key와 value쌍을 가지는 비선형 자료구조이다. 파이썬의 dict(딕셔너리)도 해시테이블을 기반으로 구현되어있다. 이 자료형은 대규모의 데이터 셋에서도 빠른 검색을 제공하는데, 그럴 수 있는 이유가 무엇일까? 그 답은 해시테이블의 생성 원리를 뜯어보면 알 수 있다. 해시테이블 생성의 핵심은 "해시함수"이다. 해시함수는 입력된 key를 해시값으로 반환하고, 이 해시값은 배열에 접근하는 인덱스로 쓰이게 된다. 우리는 '배열'에 데이터를 저장하고 싶다. 하지만 배열은 인덱스(index)로만 접근이 가능한 자료형이다. 우리가 가진 데이터에서 배열접근에 사용될 key는 문자열(str)이므로, 우리는 이 문자열을 인덱스(int)로 바꿔주는 과정을 필수적으로 거쳐야 ..
[TIL 2024. 03. 27] 모의고사 | zip() | 부분문자열 이어붙여 문자열 만들기 모의고사 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 어떻게 풀면 좋을까? 해당 문제에서 "시험문제"는 최대 10,000개 정도다. 즉, input이 상대적으로 작게 주어진 경우이다. 그렇다면 매개변수로 주어지는 answer(정답번호를 요소로 갖는 배열)의 len()을 for문으로 반복하는 것도 가능할 것 같다.즉, 완전탐색으로 풀면 되겠다.. 막히는 부분이 어디지? 1. answer의 길이가 어떨지 모르는데, 수포자 3명이 규칙적으로 찍는 배열의 길이가 모두 다르다. 이걸 어떻게 맞춰야 하지? person1 = [1,2,3,4,5] person2 = ..
[TIL 2024. 03. 26] 최소 직사각형 | 2차원 리스트에서 요소 추출하기 최소 직사각형 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 어떤 알고리즘을 사용하지? 제한사항에 따르면 문제에서 주어지는 2차원 리스트인 sizes의 길이는 1~10,000 사이이다. 해당 문제는 이렇게 input값이 작고, 모든 명함이 수납되는 "가장 작은 지갑"을 return하는 함수를 작성하라고 한다. 이럴 때 사용하기 좋은 알고리즘이 바로 "완전탐색(Brute Force)"이다 완전탐색의 특성상 모든 경우의 수를 탐색하므로, 문제의 결과값을 얻을 수 있는 가장 확실하고 기초적인 방법이다. 하지만 input이 많은 경우에는 시간 복잡도의 제한으로 ..
[TIL 2024. 03. 25] 소켓과 웹소켓 소켓 소켓이란 프로그램이 네트워크 환경에 연결하여 데이터를 주고 받을 수 있게 만들어진 연결부(통신의 양끝단)이다 (일반)소켓은 TCP/IP 프로토콜을 주로 이용하므로, TCP/IP소켓이라고도 불린다. TCP/IP소켓은 OSI 7계층 중 4계층은 전송계층에서 사용되며, 전송 계층의 프로토콜 제어를 위한 코드를 제공한다. 소켓의 등장은 OSI 7계층과 관련이 깊다. 네트워크의 구조파악과 관리를 용이하게 하기 위해 등장한 OSI 7계층은 총 7가지로 네트워크의 계층을 구분한다. 하지만 이렇게 계층을 구분하는 것만으로는 한계가 있다. 왜냐하면 각 계층별 프로토콜은 일종의 약속, 규약일 뿐이고 프로토콜 구현을 위해서는 안에 들어갈 구체적인 구현부 함수가 필요하기 때문이다. 그리고 이때 사용할 수 있는 것이 바로..
[TIL 2024. 03. 22] OSI 7계층 1. 물리계층 :전선 등을 통해 물리적으로 데이터를 전송하는 단계 구체적인 동작은 인코딩 과정에서는 아날로그 신호를 디지털 신호로 바꿔주고, 디코딩 과정에서는 디지털 신호를 다시 아날로그 신호로 변환한다. 또한 물리적인 연결은 케이블이나 전선 등을 통하며, 비트단위로 전기신호를 전송한다 2. 데이터 링크 계층 :데이터의 출발지와 도착지 주소를 확인하고, 자신에게 보낸 데이터인지 여부를 검사한 후 데이터를 처리하는 단계 이 단계에서는 IP주소가 아닌 MAC주소를 확인한다. 그 이유는 IP주소는 인터넷에 연결되면 받게 되는 고유주소이지만, AMC주소는 해당 기기가 제조되면서 할당받게 되는 고유주소이므로, 정확한 통신을 위한 해당 단계의 특성상 변경 가능성이 없는 MAC주소를 대상으로 하는 것이 더 정확하기 ..
[TIL 2024. 03. 21] 2차원 리스트: 총정리 알고리즘 문제에서 2차원 배열을 사용하는 문제를 자주 만난다 평소 헷갈렸던 모든 것을 정리해보자 2차원 리스트: 선언 기본적으로 2차원 리스트란 대괄호([ ]) 2개로 만드는 리스트를 말한다. 즉, 리스트 안에 리스트가 포함된 형태다 1차원 리스트와는 달리 2차원 리스트는 (행,열)의 개념으로 표현한다. 1. for문 for문을 통해 2차월 리스트를 선언하려면 이중for문을 써야한다. 다시 말해, 바깥 for문은 row를 만들고, 안쪽 for문은 col을 만드는 것이다 a = [] for i in range(3): line = [] for j in range(4): line.append(0) a.append(line) print(a) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0,..