분류 전체보기 36

동적계획법(Dynamic Programming)

다이나믹 프로그래밍이란? - 메모리를 적절히 사용하여 수행시간을 비약적으로 향상시키는 방법 - 이미 계산된 결과는 별도 메모리 영역에 저장하여 다시 계산하지 않도록 함 - 다이나믹 프로그래밍의 구현은 일반적으로 하향식(Top-Down)과 상향식(Bottom-Up)으로 구성 일반적인 프로그래밍 분야에서의 동적(Dynamic)의 의미 - 자료구조에서 동적할당(Dynamic Allocation)은 프로그램이 실행되는 도중에 실행에 필요한 메모리를 할당하는 기법 - 동적계획법(Dynamic Programming)에서의 동적(Dynamic)은 별다른 의미없이 붙여진 단어 다이나믹 프로그래밍의 조건 1. 최적 부분 구조(Optimal Substructure) - 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 ..

순차 탐색 &이진 탐색

순차탐색이란? 리스트에서 특정 데이터를 찾기 위해 앞에서부터 순차적으로 데이터를 확인하는 탐색 방법 이진탐색이란? 정렬된 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 하나씩 확인하는 방법 - 시작점, 중간점, 끝점을 이용하여 탐색 범위를 설정 - 시간복잡도 log(2)N 파이썬 라이브러리 bisect from bisect import bisect_left, bisect_right a = [1, 2, 3, 4, 4, 6, 7, 8] x = 4 bl = bisect_left(a, x) # 정렬을 유지하며 x를 삽입할 가장 왼쪽의 인덱스를 반환 br = bisect_right(a, x) # 정렬을 유지하며 x를 삽입할 가장 오른쪽의 인덱스를 반환 print(bl) print(br) # 값이 특정 범위에 속..

Node & Express

Node.js란? - 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼 - 작성 언어로 JavaScript를 활용 - 논블로킹(Non-blocking)I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능 보유 - 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 함 이라고 위키백과에 설명되어 있지만 쉽게 설명하면 JavaScript를 브라우저 밖에서 사용할 수 있도록 하는 런타임 환경입니다. Express.js란? - Node.js를 활용하여 웹 애플리케이션, API 개발을 위해 설계된 웹 프레임워크 - 사실상 Node.js의 표준 서버 프..

카테고리 없음 2022.02.22

라우터 & 패킷

라우터란? - 공유기로 통용되며 컴퓨터 네트워크 간에 데이터 패킷을 전송하는 네트워크 장치 - 패킷의 위치를 추출하여 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 데이터 패킷을 다음 장치로 전달 - 간단히 말해 서로 다른 네트워크 간의 정보 전달을 위한 중계를 맡는 장치 패킷이란? - 패킷 방식의 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록. 제어 정보와 사용자 데이터로 이루어짐 - 패킷이란 일정한 단위길이를 말하며, 통상 1024비트의 길이 참고 https://ko.wikipedia.org/wiki/ https://velog.io/@devmin/%EC%9B%B9%EC%9D%B4-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94-%EC%9B%90%EB%A6%AC-skk6..

Web/기초 2022.02.15

인터넷 작동 원리

인터넷이란? - 전세계 수많은 클라이언트 컴퓨터와 서버 컴퓨터들이 연결된 통신망이자 네트워크의 집합체 네트워크란? - 분산되어 있는 컴퓨터들을 연결한 디지털 통신망 브라우저란? - 웹 서버에서 이동하며 쌍방향으로 통신하고 HTML 문서나 파일을 출력하는 그래픽 사용자 인터페이스(GUI) 기반의 응용 소프트웨어 웹 브라우저는 대표적인 HTTP 사용자 에이전트의 하나이기도 하다. * HTTP: 인터넷에서 정보를 주고받는 통신 규약(컴퓨터 간의 암호, 규칙) * 사용자 에이전트: 사용자를 대신하여 일을 수행하는 소프트웨어 에이전트 서버란? - 서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램 또는 장치를 의미 - 서버에서 동작하는 소프트웨어를 서버 소프트웨어라고 ..

Web/기초 2022.02.15

깊이우선탐색(DFS)/너비우선탐색(BFS)

탐색(Search)이란? - 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 - 대표적인 그래프 탐색 알고리즘으로는 DFS(Depth-First Search)와 BFS(Breadth-First Search)가 있음 - DFS/BFS는 코딩테스트 빈출유형이므로 반드시 숙지해야 함 DFS(Depth-First Search)란? - 깊이우선탐색이라고도 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 - 스택 자료구조(혹은 재귀함수)를 사용 - 동작 과정 탐색 시작 노드를 스택에 push, 방문 처리 스택 최상단에 방문하지 않은 인접한 노드가 있으면 push, 방문 처리(단, 방문하지 않은 노드가 없으면 pop) 더 이상 2. 의 과정을 수행할 수 없을 때까지 반복 def dfs(graph, v,..

스택(Stack), 큐(Queue), 재귀(Recursion)

스택 자료구조 - 먼저 들어온 데이터가 마지막에 나가는 형식, 후입선출(Last In First Out) - 입구와 출구가 동일한 형태로 시각화 큐 자료구조 - 먼저 들어온 자료가 먼저 나감, 선입선출(First In First Out) - 입구와 출구가 각각 뚫려있는 터널의 형태로 시각화 재귀함수(Recursion Function) - 자기 자신을 다시 호출하는 함수 - 컴퓨터가 함수를 연속적으로 호출하면 컴퓨터 메모리 내부의 스택 프레임에 쌓임, 따라서 스택을 사용해야 할 때 구현상 스택 라이브러리 대신 재귀함수를 이용하는 경우가 많음 - DFS/BFS 의 구현에 있어 매우 중요 유클리드 호제법 - A>B일 때, A를 B로 나눈 나머지를 R이라 한다. - A와 B의 최대공약수는 R과 B의 최대공약수와..

백준 온라인 저지 - 영화감독 숌(#1436) 파이썬

문제설명 이 문제는 While loop을 이용하여 오름차순으로 모든 양의 정수를 검사하며 올라가 666이 포함된 숫자를 모두 찾고, 순번을 매긴 뒤 순번과 N값을 비교하면 쉽게 해결할 수 있습니다. 이때 파이썬에서 제공하는 find()함수를 이용하여 str 자료형에 "666"이 포함되었는지 여부를 확인할 수 있습니다. 영화감독 숌(#1436) 파이썬 코드 inp = int(input()) cnt = 0 idx = 0 while True: idx += 1 if str(idx).find("666") != -1: cnt += 1 if cnt == inp: break print(idx)

백준 온라인 저지 - 체스판 다시 칠하기(#1018) 파이썬

문제설명 이 문제는 가능한 모든 경우의 수를 for loop을 통하여 접근하여 최솟값을 결정하는 문제입니다. 파이썬의 List slicing 기능을 이용하여 주어진 문제를 보다 쉽게 해결할 수 있었습니다. 체스판 다시 칠하기(#1018) 파이썬 코드 import sys #입력 M, N = map(int, input().split()) inp = [] for i in range(M): inp.append(sys.stdin.readline()) # 체스판 자르기 def cut_board(first_board): length = len(first_board) width = len(first_board[0]) board_list = [] for w in range(width - 7): for l in range..