분류 전체보기 121

[python] 백준 1149번: RGB거리(DP)

# 1149 RGB거리 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline N = int(input()) house = [] for _ in range(N): R, G, B = map(int, input().split()) house.append([R, G, B]) for i in range(1, len(house)): house[i][0] = hou..

Algorithm 2023.02.08

쿠키(Cookie)와 세션(Session)

✅ 쿠키와 세션을 사용하는 이유 HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용된다. HTTP 프로토콜의 특징은 다음과 같다. 🔎 1. Connctionless 프로토콜 (비연결 지향) 클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리 방식이다. HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 특성이 있다. HTTP가 TCP위에서 구현되었기 때문에 (TCP는 연결지향, UDP는 비연결 지향) 네트워크 관점에서 keep-alive는 옵션으로 connectionless의 연결비용을 줄이는 것을 장점으로 비연결지향이라 한다. 🔎 2. statele..

Computer Science 2023.02.08

함수형 프로그래밍의 특징과 장단점

✅ 함수형 프로그래밍이란? 함수형 프로그래밍은 하나의 프로그래밍 패러다임으로 정의되는 코딩 접근 방식이며, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미한다. ✅ 함수형 프로그래밍의 특징 🔎 1. 순수함수 (Pure function) 동일한 입력에는 항상 같은 값을 반환해야 하는 함수 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 하는 함수 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없는 것 num = 1 def add(a): return a + num 위와 같은 예제에서는 add라는 함수 안에서 전역으로 선언된 변수인 num을 참조하기 때문에 순수함수라고 볼 수 없다. // 순수함수 def add(a..

Computer Science 2023.02.08

IPC(Inter-Process Communication)란?

✅ 프로세스(Process)의 개요 프로세스(Process)는 프로그램이 구동될 때 주 메모리에 적재되며, 메모리 상에서 실행되는 작업의 단위를 말한다. 즉 컴퓨터가 연속적으로 실행하고 있는 컴퓨터 프로그램을 뜻하며 작업(Task)와 같은 의미로 쓰인다. 프로세스는 원래 독립적이지만 상황에 따라 프로세스끼리 협력해야 되는 경우가 발생한다. 이럴 때 프로세스간 자원과 데이터를 공유할 수 있어야 하는데, 서로간의 통신을 위해 별도의 매커니즘이 필요하고, IPC라는 설비를 이용해 프로세스간 통신을 할 수 있게 된다. 📚 프로세스와 스레드에 대해 알아보기 프로세스(Process)와 스레드(Thread) ✅ 프로세스란? 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이다. 코드의 집합으로 이루어진 프로그램이..

Computer Science 2023.02.06

[python] 백준 1697번: 숨바꼭질(BFS)

# 1697 숨바꼭 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline from collections import deque N, K = map(int, input().split()) MAX = 100001 visited = [-1] * MAX visited[N] = 0 # 수빈이의 위치 방문처리 queue = deque() queue.appen..

Algorithm 2023.02.04

[MySQL] 조회 최적화를 위한 인덱스 이해하기

컴퓨터 구조의 기본이 되는 모습을 표현하면 위와 같다. CPU가 데이터를 가지고 오거나 저장하기 위해서는 I/O 입출력 버스를 통하게 되고 메모리나 디스크, 모니터로 데이터를 보내게 된다. 여기서 데이터를 저장하기 위한 용도로 자주 사용되는 것은 메모리와 디스크이다. 그렇다면 메모리와 디스크의 차이점은 무엇일까? 메모리 디스크 속도 빠름 느림 영속성 전원이 공급되지 않으면 휘발 영속성이 있음 가격 비쌈 저렴 속도 측면에서 보면 메모리는 디스크에 비해서 훨씬 빠르다. 하지만 영속성 측면에서 보면 메모리는 전원이 공급되지 않으면 사라지게 된다. 반면에 디스크 같은 경우에는 전원이 공급되지 않더라도 데이터가 보존이 된다. 그렇기 때문에 영속성 측면에서 본다면, 결국 데이터베이스의 데이터는 디스크에 저장이 되어..

Database/MySQL 2023.02.04

[MySQL] MySQL 아키텍처

✅ MySQL 아키텍처 데이터베이스는 파일을 관리하는 서버이다. Client가 Server에게 데이터를 요청하는 것처럼 서버는 데이터베이스에 데이터를 요청하게 된다. Client는 JSON을 통해 Server에게 데이터를 요청하는 것과 같이 Server는 SQL을 통해서 MySQL 서버에 데이터를 요청하게 된다. 위 그림에서 MySQL엔진은 사람으로 비유하면 판단과 명령을 하는 두뇌라고 생각하면 되고, 스토리지 엔진은 판단을 수행하는 팔과 다리라고 보면 될 것 같다. ✅ MySQL엔진 MySQL엔진을 세부적으로 살펴보면 쿼리 파서, 전처리기, 옵티마이저, 쿼리 실행기로 이루어져 있다. 🔎 쿼리파서 SQL을 파싱하여 Syntax Tree를 만듬 이 과정에서 문법 오류 검사가 이루어짐 🔎 전처리기 쿼리파서에..

Database/MySQL 2023.02.03

[DB] 데이터베이스 정규화란?

✅ 정규화란? 데이터베이스 정규화는 관계형 데이터베이스 데이터 모델의 중복을 최소화하고 데이터의 일관성, 유연성을 확보하기 위한 목적으로 데이터를 분해하는 과정을 뜻한다. 일반적으로 크고 제대로 조직되지 않은 테이블들을 잘 조직된 여러 개의 테이블을 나누는 과정이라고 생각하면 이해하기 쉽다. 정규화를 하는 목적은 데이터들을 조금 더 효율적으로 관리하는데에 그 목적이 있다. 불필요하거나 중복되는 데이터들을 제거한다. 이상현상(Anomaly)을 방지한다. 데이터 저장을 논리적으로 한다. 데이터를 효율적으로 관리하기 위해서는 위의 3가지를 고려해 데이터모델을 재설계해야 한다. 이렇게 정규화를 수행하면 비즈니스 로직에 변화가 생기더라도 데이터 모델의 변경을 최소화할 수 있다. ✅ 이상현상(Anomaly)이란? ..

Computer Science 2023.02.02

[MongoDB] Sharded Cluster

✅ Sharded Cluster 왼쪽의 A-Z는 Replica Set인데 만약 Replica Set에 감당할 수 없을 정도로 많은 데이터들이 유입이 된다면, 오른쪽처럼 Sharded Cluster로 배포하게 된다. 여기서 Sharding은 하나의 큰 데이터를 여러개로 분할하는 과정을 뜻하고, 분할되는 데이터 셋의 모음을 Shard라고 한다. Sharded Cluster는 분산을 위한 솔루션으로 Replica Set으로 데이터의 서브셋이 나뉜다. Sharding은 분산처리 즉, Scale-Out을 위한 솔루션이다. ✅ Sharded Cluster의 장단점 장점 단점 - 용량의 한계를 극복할 수 있다. - 데이터 규모와 부하가 크더라도 처리량이 좋다. - 고가용성을 보장한다. - 하드웨어에 대한 제약을 해결..

Database/MongoDB 2023.02.01

애자일(Agile)이란?

✅ 폭포수 모델(Waterfall Model)이란? 애자일에 대해 알아보기 전에 우리에게 익숙한 폭포수 개발 방식(Waterfall model)에 대해서 짚고 넘어가보자 폭포수 모델 Waterfall Model 소프트웨어 개발 생명주기(Software Development Life Cycle)에 기반하고 있는 소프트웨어 개발 기법으로, 워터폴 모델, 폭포수 모형, 선형 순차 모형, 단계적 생명주기라고도 한다. 한 번 떨어지면 거슬러 올라갈 수 없는 폭포수와 같이 소프트웨어 개발도 각 단계를 확실히 매듭짓고 다음 단계로 넘어간다는 의미에서 붙여진 명칭이다. 전통적인 시스템 생명주기 모델로 소프트웨어를 개발할 때 가장 널리 사용된다. 폭포수 모델로 프로젝트를 진행하면 보통 요구 사항 분석, 설계, 개발, 테..

Computer Science 2023.02.01
728x90