분류 전체보기 168

폰 노이만 구조

목표 폰 노이만 구조를 이해할 수 있다. 폰 노이만 구조의 장단점을 이해할 수 있다. 1. 애니악(ENIAC) 폰 노이만 구조가 나오기 전에는 애니악이라는 컴퓨터가 주로 이용되었습니다. 애니악은 계산을 할 때마다 손으로 직접 진공관의 회로 스위치를 다시 조정하여 새 입력을 처리하는 하드웨어 프로그램 방식입니다. 2. 폰 노이만 구조 폰 노이만 구조는 중앙처리장치(CPU), 메모리, 프로그램 세 가지 요소로 구성되어 있습니다. CPU와 메모리는 서로 분리되어 있고 둘을 연결하는 버스를 통해 명령어 읽기, 데이터 읽기 및 쓰기가 가능합니다. 메모리 안의 프로그램과 데이터 영역은 물리적 구분이 없기 때문에 같은 메모리와 버스를 사용합니다. 따라서 CPU가 명령어와 데이터에 동시 접근할 수 없습니다. 폰 노이만..

CS/운영체제 2021.01.21

[백준 16137] 견우와 직녀 - Python

문제 보기 [사용한 알고리즘] BFS(너비 우선 탐색) [문제 접근] 일반적인 BFS 최단 거리 문제와 달리 가장 먼저 발견한 경로가 최단 경로가 아닐 수 있습니다. 따라서 이동할 수 있는 모든 경로를 BFS 방식으로 확인하였습니다. [알고리즘] 1. 견우의 시작점 (0, 0)에서 출발합니다. 2. 상, 하, 좌, 우로 이동할 수 있는 위치가 있는지 확인합니다. - 1은 바로 이동할 수 있습니다. - 오작교를 연속해서 건널 수 없습니다. - 절벽이 교차하는 구간은 오작교를 설치할 수 없습니다. - 오작교는 시간 주기가 일치할 때((현재 시간 + 1) % 시간 주기 = 0) 이동할 수 있습니다. 3. 직녀를 만날 때마다 최단 경로 변수에 최단 값을 저장합니다. [코드] from collections imp..

[백준 18429] 근손실 - Python

문제 보기 [사용한 알고리즘] 순열(permutation) [문제 접근] 운동 키트를 순서대로 나열할 수 있는 모든 경우의 수를 구한 후 조건 검사를 하는 문제입니다. N의 최댓값이 8이기 때문에 순열을 사용해도 시간 복잡도가 여유로웠습니다. [알고리즘] 1. 순열을 통해 운동 키트 나열 순서를 구합니다. 2. 해당 순서로 운동을 수행하였을 때 중량 500을 유지할 수 있는지 확인합니다. 3. 중량 500을 유지할 수 있는 순서의 수를 출력합니다. [코드] import sys from itertools import permutations if __name__ == "__main__": n, k = map(int, sys.stdin.readline().split()) array = list(map(int,..

[백준 8980] 택배 - Python

문제 보기 [사용한 알고리즘] 그리디(Greedy), 정렬 [알고리즘] 1. 도착 순서가 빠른 순서로 박스를 정렬합니다. 2. 마을의 수와 길이가 동일한 배열을 선언합니다. (초기값은 트럭의 최대 용량입니다) 3. 현재 박스의 출발 위치에서 도착 위치로 배송할 수 있는 만큼 최대한 박스를 배송합니다. - 2번에서 선언한 배열에는 각 위치에 배송할 수 있는 최대 박스 크기가 저장되어 있습니다. 따라서 출발 위치에서 도착 위치 사이에 있는 배열의 값 중 가장 작은 값과 현재 배송할 박스의 수 중 작은 값을 최종적으로 배송할 수 있습니다. [코드] import sys if __name__ == "__main__": n, c = map(int, sys.stdin.readline().split()) m = int..

카테고리 없음 2021.01.17

TCP와 UDP

목표 TCP 개념을 이해할 수 있다. UDP 개념을 이해할 수 있다. TCP와 UDP의 차이점을 설명할 수 있다. 이번 글에서는 네트워크의 계층 중 전송 계층에서 사용하는 프로토콜에 대서 알아보도록 하겠습니다. 전송계층은 데이터의 전달을 담당하는 계층이며 이를 위해 사용하는 대표적인 프로토콜은 TCP와 UDP입니다. 그렇다면 TCP와 UDP는 어떠한 프로토콜인지, 둘의 차이점이 무엇인지 하나씩 파악해보도록 하겠습니다. TCP(Transmission Control Protocol) 일반적으로 TCP는 IP와 함께 사용합니다. IP는 데이터를 한 장소에서 다른 장소로 정확하게 옮겨주는 역할을 하며, TCP는 데이터가 성공적으로 전송될 수 있도록 데이터의 흐름을 조절하는 역할을 합니다. 따라서 TCP는 연결형..

CS/네트워크 2021.01.16

[백준 7453] 합이 0인 네 정수 - Python

문제 보기 [사용한 알고리즘] 구현, Dictionary [문제 접근] A[a], B[b]의 값의 덧셈으로 만들 수 있는 결과를 딕셔너리에 저장합니다. 그리고 C[c], D[d]로 만들 수 있는 값에 -를 붙인 값이 딕셔너리에 존재하는지 확인하여 최종적으로 A[a], B[b], C[c], D[d]의 합이 0인 쌍의 개수를 구하였습니다. [알고리즘] 1. A[a]와 B[b]로 만들 수 있는 딕셔너리를 구현합니다. - 딕셔너리의 key와 value는 만들 수 있는 숫자와 해당 숫자의 개수입니다. 2. C[c]와 D[d]로 만들 수 있는 값에 -를 붙인 값이 해당 딕셔너리에 존재하는지 확인한 후 존재한다면 해당 key의 value 값을 더합니다. [코드] import sys if __name__ == "__m..

[백준 3655] 최종 순위 - Python

문제 보기 [사용한 알고리즘] 위상 정렬(Topological) [문제 접근] 순서를 나열하는 문제는 위상 정렬을 활용하면 효과적으로 구현할 수 있습니다. [알고리즘] 1. 작년 순위 정보를 통해 2차원 graph 배열과 1차원 indegree 배열 값을 할당합니다. - graph[i][j]: i보다 j가 순위가 낮으면 True, 반대는 False를 대입합니다. - indegree [i]: i보다 순위가 낮은 팀의 개수를 대입합니다. 2. 순위 변동이 있는 팀은 graph 값과 indegree 값을 업데이트합니다. 3. 위상 정렬을 수행합니다. - 사이클이 있으면 IMPOSSIBLE을 리턴합니다. (시작점을 찾지 못합니다) - 큐에 값이 2개 이상 있으면 ?를 리턴합니다. (여러 가지 경우의 수가 나올 ..

[백준 6497] 전력난 - Python

문제 보기 [사용한 알고리즘] 크루스칼(Kruskal) [문제 접근] 모든 도시는 항상 연결 그래프의 형태이며 최대로 비용을 절약하는 문제이기 때문에 MST(Minimal Spanning Tree) 문제라고 생각하였습니다. [알고리즘] 1. 입력받은 도로의 비용을 기준으로 오름차순 정렬합니다. 2. 비용이 낮은 순서대로 하나씩 선택하여 두 도시를 연결하는 도로를 설치할 수 있는지 확인합니다. - 해당 도로 설치로 인해 사이클이 생성될 수 있다면 해당 도로를 설치하지 않습니다. 3. 설치하지 않은 도로의 합을 출력합니다. [코드] import sys def find_parent(x, parent): if parent[x] != x: parent[x] = find_parent(parent[x], parent..

[프로그래머스] 징검다리 건너리 - Python

문제 보기 [사용한 알고리즘] 이진 탐색(Binary Search) [문제 접근] left = 1, right = max(stones)로 초기화한 후 이진 탐색을 통해 최대 몇 명까지 징검다리를 건널 수 있는지 구하였습니다. mid 값((left + right) // 2) 보다 작은 구간이 연속적으로 k개 이상이면 건널 수 없으므로 mid = right - 1로 범위를 좁혀나갔습니다. 마찬가지로 mid 값보다 작은 구간이 연속적으로 k개 미만이면 건널 수 있으므로 left = mid + 1로 범위를 좁혀나갔습니다. [알고리즘] 1. left = 1, right = max(stones)로 초기화합니다. 2. 이진 탐색을 수행합니다. mid 값과 stones의 값을 비교해서 mid 값보다 작은 구간이 연속적..

동기와 비동기, 블로킹과 논블로킹

목표 동기와 비동기의 개념을 이해할 수 있다. 블로킹과 논블로킹의 개념을 이해할 수 있다. 동기/비동기와 블로킹/논블로킹의 차이점을 설명할 수 있다. 동기/비동기 동기/비동기는 작업을 수행하는 주체 간의 시간적 연관성과 관련된 작업입니다. 이때 작업을 수행하는 주체 사이에 시간적 연관성이 있으면 동기, 연관성이 없으면 비동기입니다. 동기(Synchronous) 요청과 그 결과가 동시에 일어나는 작업입니다. 여기서 말하는 동시란 요청하는 순간 결과가 바로 나와야 한다는 뜻이 아니라 요청과 결과가 한 자리에서 동시에 일어남을 의미합니다. 작업을 수행하는 주체들이 서로 동시에 수행하거나, 동시에 끝나거나, 하나의 수행 결과가 다른 수행 결과의 시작점이 되는 작업입니다. 비동기(Asynchronous) 요청과 ..

CS/운영체제 2021.01.07