조금씩 업데이트하는 프로세스와 쓰레드 관련 메모장. 다음 추가할 주제는 데드락, 멀티 프로세스 vs 멀티 쓰레드 이다. 프로세스 프로그램의 실행 단위. (프로그램의 인스턴스) 메모리를 text, data, bss, stack, heap 5가지 공간으로 나눠서 가지고 있음 text 실행 코드가 저장됨. 실행 중에 변경되지 않음(읽기 전용) data 초기화된 전역 변수, 정적 변수가 저장됨. 프로그램 시작 전에 할당되고, 실행 중에 변경 가능 bss 선언은 됐지만 초기화되지 않은 전역 변수, 정적 변수가 저장됨. stack 함수 호출(함수의 지역 변수, 매개 변수, 호출 포인터), 지역 변수가 저장됨 함수 호출했을 때 할당되는 메모리 공간을 stack frame이라고 함 힙에 비해서 메모리 할당, 해제 속도..
Computer science
프로그래머스의 레벨 2 문제 호텔 대실 문제 요구 조건 이해하기 필요한 최소 객실의 수를 알아내야 한다. 내 풀이 방법 빈 방이 있으면 주고, 없으면 객실을 하나 늘린다. 빈 방이 있는지 검사하는 방법은 예약 시작 시간과 방들의 퇴실 시간 + 10분을 비교한다. 예약 목록을 예약 시작 시간을 기준으로 정렬하고 예약 목록을 순회하면서 1번을 반복한다. class Room: def __init__(self, t): self.time = t def change(self, t): self.time = t def is_empty(self, t): if self.time + 10
프로그래머스의 레벨 2 문제 리코쳇 로봇 문제 요구 조건 이해하기 보드 게임판의 시작 지점에서 목표 지점까지 최소 몇 번 만에 도착할 수 있는지 찾아야 한다. 내 풀이 방법 최소 이동 횟수를 구하는 문제이므로 BFS를 사용해서 풀 수 있다고 생각했다. 최소 이동 횟수를 구해야 하므로 BFS를 구현할 때, 턴을 나눠서 행동하도록 했다. 그리고 도달할 수 없는 경우는 모든 포지션을 방문하고 큐가 비었을 때라고 생각했다. 미끄러지는 이동을 담당하는 move 함수를 만들고, BFS를 사용해서 풀었다. from queue import deque def move(pos, board, direction): board_height = len(board) board_width = len(board[0]) if dir..
코딜리티의 Easy 문제 PassingCars 문제 요구 조건 이해하기 배열을 순회하면서 원소의 값이 1이라면 그 이전 인덱스까지의 원소들 중에 0이 몇 개나 존재하는지 세어야 한다. 내 풀이 방법 문제 카테고리가 구간합인걸 보고 힌트를 얻었다. 누적합 배열을 만들고, 주어진 배열을 순회하며 값이 1인 곳의 index - 누적합[index] + 1이 이전까지의 원소들 중 0의 개수라는 것을 이용했다. def solution(A): sum_array = [A[0]] result = 0 for i in range(1, len(A)): sum_array.append(A[i] + sum_array[i-1]) for i, value in enumerate(A): if value == 1: result += i..
프로그래머스의 레벨 2 문제 숫자 카드 나누기입니다. 문제 요구 조건 배열 A, B가 있을 때 A 원소들의 공약수이면서 B 원소들은 하나도 나눌 수 없는 수 중에서 가장 큰 수를 구하고, B 원소들의 공약수이면서 A 원소들은 하나도 나눌 수 없는 수 중에서 가장 큰 수를 구해서 더 큰 수를 리턴해야 합니다. 내 풀이 방법 배열의 범위가 크고 원소 값의 범위도 크기 때문에 완전탐색으로 해결할 수 없는 문제라고 생각했습니다. 탐색 시간을 줄이기 위해서 각 배열에서 가장 작은 수의 약수만 구합니다. 구한 약수들을 큰 순서대로 탐색하면서 조건에 맞는지 확인합니다. # 배열의 길이가 50만, 원소의 범위는 1~1억이다. # 이걸 일일이 확인하면 시간 내에 풀 수 없다. # 시간을 단축하는 방법으로, 나눌 수 있는..
프로그래머스의 레벨 2 문제 귤 고르기입니다. 문제 요구 조건 k개의 귤을 선택할 때 서로 다른 종류의 수를 최소화하는 것입니다. 서로 다른 종류의 수를 최소화하기 위해서 동일한 종류의 귤이 많은 순서대로 선택하면 풀 수 있습니다. 내 풀이 방법 동일한 종류의 귤이 많은 순서를 알기 위해서 귤 배열을 순회하면서 딕셔너리에 키를 종류로, 갯수를 값으로 저장합니다. 딕셔너리를 값을 기준으로 정렬하고 순회합니다. 이때, k -= value, answer += 1는 귤 1종류를 추가하는 것이고, k가 0이하라면 다 추가한 것이니 answer를 리턴합니다. # 1. 가장 많이 등장한 순서대로 정렬 # 2. k개만큼 세면서 종류 몇가진지 체크 def solution(k, tangerine): answer = 0 d..