본문 바로가기
728x90

전체 글279

[OS] 스레드 프로세스와 스레드 프로세스 스레드 운영체제 입장에서 작업 단위 CPU 입장에서 작업 단위 서로 독립적 프로세스A가 비정상 종료되어도 프로세스B는 정상 작동 서로 강하게 연결 프로세스가 종료되면 프로세스 내의 스레드도 강제종료 데이터를 주고 받을 때, 프로세스 간 통신(IPC) 이용 변수, 파일을 공유하고 전역 변수나 함수 호출을 통해 통신 스레드 CPU 스케줄러가 CPU에 전달하는 일 하나 하나의 프로세스에는 여러 개의 스래드가 존재할 수 있음 - 관련 용어 멀티 스레드 : 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법 멀티 태스킹 : 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법 (시분할 시스템) 멀티 프로세싱 : CPU를 여러 개 사.. 2021. 11. 2.
[OS] 프로세스 프로그램 vs 프로세스 - 프로그램 저장장치에 저장되어 있는 정적인 상태 - 프로세스 실행을 위해 메모리에 올라온 동적인 상태 프로그램으로 작성된 작업 절차를 실행에 옮김 하나의 작업 단위 (=태스크, task) - 프로그램에서 프로세스로 전환 프로그램이 운영체제로부터 프로세스 제어 블록 (PCB, Process Control Block)을 받으면 프로세스가 됨 프로세스 = 프로그램 + 프로세스 제어 블록 프로세스 상태 - 생성 상태 (create status) 프로그램이 메모리에 올라오고 운영체제로부터 프로세스 제어 블록 할당받은 상태 메모리 할당, 프로세스 제어 블록 생성 - 준비 상태 (ready status) 프로세스가 CPU를 얻을 때까지 기다리는 상태 프로세스 제어 블록은 준비 큐 (ready.. 2021. 11. 2.
[OS] 운영체제 개요 운영체제 (Operating System) 일반 컴퓨터나 노트북의 전원을 켜면 가장 먼저 만나게 되는 소프트웨어 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어 하드웨어 전체를 관리하는 소프트웨어 - 운영체제 종류 컴퓨터용 운영체제 개인용 : 윈도우, Mac OS 대형 컴퓨터 : 유닉스, 리눅스 모바일 운영체제 : iOS, 안드로이드 임베디드 운영체제 : CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 운영체제 운영체제의 역할 - 자원관리 컴퓨터 자원 (computer resource) : 컴퓨터에 부착된 모든 장치 운영체제는 자원을 적절히 응용 프로그램에게 배분/회수하여 사용자가 원활히 작업할 수 있도록 도움 - 자원 보호 비정상적인 .. 2021. 11. 2.
[BOJ/Python] 5052. 전화번호 목록 📌 문제 https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 📌 문제 접근 방법 처음에는 입력 받은 번호를 정렬시키고 하나씩 비교하면서 다른 숫자를 찾았다. 될 줄 알았는데 n이 10000까지 입력가능하니까 최악의 경우엔 1초를 넘긴다. 그래서 코드를 갈아엎었다! 인덱스를 초기에 0으로 설정해놓고 모든 문자열을 순회하면서 해당 인덱스의 값을 key로, 해당 문자열을 value로 해서 temp에 넣는다. temp의 value중.. 2021. 10. 30.
[BOJ/Python] 14719. 빗물 📌 문제 https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 📌 문제 접근 방법 우선 블록들 중에서 가장 높이가 높은 블록을 찾는다. 그 블록을 기준으로 왼쪽과 오른쪽으로 나눠서 탐색한다. 이하 가장 높이가 높은 블록을 기준 블록, 0번 부터 기준 블록의 왼쪽인덱스까지를 왼쪽 그룹, 기준 블록의 오른쪽인덱스부터 마지막 인덱스까지를 오른쪽 그룹이라 칭하겠다. 기준 블록의 왼쪽 인덱스부터 시작하여 0번 인덱스까지 왼쪽 그룹에서 가장 .. 2021. 10. 29.
[BOJ/Python] 2688. 줄어들지 않아 📌 문제 https://www.acmicpc.net/problem/2688 2688번: 줄어들지 않아 첫째 줄에 테스트 케이스의 개수 T(1 2021. 10. 28.
[BOJ/Python] 20057. 마법사 상어와 토네이도 📌 문제 https://www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 📌 문제 접근 방법 우선 토네이도가 이동하는 부분 먼저 구현해줬다. 출발은 (N//2, N//2)에서 한다. 왼쪽 -> 아래 -> 오른쪽 -> 위 의 방향 순서대로 움직이기 때문에 이에 맞춰 델타 행렬을 만들어준다. 1칸씩 2번, 2칸씩 2번, 3칸씩 2번 ... 이런식으로 이동하길래 cnt를 2로 초기화 한 후 2번 이동이 끝나면 값이 변경되도록 cnt를.. 2021. 10. 28.
[BOJ/Python] 4948. 베르트랑 공준 📌 문제 https://www.acmicpc.net/problem/4948 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 📌 문제 접근 방법 is_prime이라는 배열을 만들고, 2부터 n의 제곱근까지를 탐색하며 소수의 배수를 모두 False로 바꿔준다. n부터 2n까지 반복하여 해당 숫자가 소수라면 cnt를 1 더해준다. n에 0이 입력되면 반복문을 종료한다. 📌 코드 # 백준 4948 베르트랑 공준 import sys input = sys.stdin.readline def is_prime_numb.. 2021. 10. 21.
[Algorithm] 다익스트라(dijkstra) 알고리즘 최단 경로 알고리즘 간선의 가중치가 있는 그래프에서 두 정점 사이의 경로들 중에 간선의 가중치의 합이 최소인 경로 하나의 시작 정점에서 끝 정점까지 최단 경로 다익스트라 알고리즘 : 음의 가중치 허용x 벨만-포드 알고리즘 : 음의 가중치 허용 모든 정점들에 대한 최단 경로 플로이드 워샬 알고리즘 다익스트라(dijkstra) 알고리즘 시작 정점에서 거리가 최소인 정점을 선택해나가면서 최단 경로 구함 탐욕 기법 사용, MST의 프림 알고리즘과 유사 def dijkstra(start): distance[start] = 0 # 노드의 개수만큼 반복 for _ in range(N+1): min_idx = -1 min_value = float('inf') for i in range(N+1): if not visit.. 2021. 10. 21.
[BOJ/Python] 1197. 최소 스패닝 트리 📌 문제 https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net 📌 문제 접근 방법 크루스칼 알고리즘을 사용해서 구현하였다. 가중치를 기준으로 오름차순 정렬한 후, 정렬된 순서대로 간선을 선택하여 사이클이 만들어지지 않는다면 (간선에 연결된 노드 2개가 같은 집합이 아니라면) 노드를 연결하고 가중치를 total에 더해준다. 📌 코드 # 백준 1197 최소 스패닝 트리 def find_set(x): if x.. 2021. 10. 21.
728x90