본문 바로가기

취업과 기본기 튼튼

(76)
빽 투더 기본기 [OS 2편]. 쓰레드 이 글에서는 Threaad(쓰레드)에 대해 정리해본다. 1. Thread 란 1.1. Process vs Thread Process : 메모리에 올려져있는 실행중인 프로그램. 프로세스간 메모리 영역은 독립적이다. (stack, heap, data, text) 각 프로세스는 별도의 메모리에 할당되며, IPC 통신이 아니면 서로 접근할 수 없다. Thread : 프로세스 내에서 실행되는 흐름의 단위 프로세스 내에 쓰레드 단위로 stack 만 할당받고, heap, data, text 영역은 공유한다. 즉 쓰레드 간에는 데이터 힙 공간을 통해 IPC 를 거치지 않아도 자원 접근, 수정이 가능하다. 쓰레드는 프로세스 내부의 좀 더 경량화된 프로세스이다. 1.2. 왜 쓰는가? (Multi process vs Mul..
빽 투더 기본기 [OS 1편]. 프로세스 이 글에서는 운영체제의 기초가 되는, Process (프로세스)에 대해 정리해본다. 1. Process 란 1.1. Program vs Process Program : 디스크에 저장된 실행가능한 명령어 파일. 수동적인 개체. Process : 메모리에 올려져있는 실행중인 프로그램. 적극적인 개체. 프로그램이 실행되면 (메모리에 로드되면) 프로세스가 된다. 1.2. Process in Memeory 프로세스는 메모리에서 다음과 같은 독립적인 공간을 할당받는다. Stack : 임시 데이터들을 담는다. ex. 리턴 어드레스, 지역 변수 Heap : 동적 할당 데이터들을 담는다. ex. malloc() Data : 전역 변수를 담는다. Text : 모든 코드를 담는다. 1.3. Process State 프로세스..
빽 투더 기본기 [DB 1편]. 데이터 베이스 기초 핵심 다음 3가지가 가장 핵심 기초라고 생각되어 정리해본다. 기본 개념과 용어 트랜잭션 테이블 설계와 정규화 1. 기본 개념 단어 1.1. 용어 관계형 데이터 모델 릴레이션, 속성(필드, 컬럼), 튜플(레코드, 행) 도메인 각 필드가 가질 수 있는 모든 값들의 집합 원자값(atomic value, 더 이상 분리되지 않는 값)이어야 함 스키마 테이블 정의에 따라 만들어진 데이터 구조 차수 테이블 스키마에 정의된 필드의 수 테이블 인스턴스 테이블 스키마에 현실 세계의 데이터를 레코드로 저장한 형태 기수(cardinality) 테이블 인스턴스의 레코드의 수 2. 트랜잭션 2.1. 정의 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위 '하나의 작업' 에는 하나의 목표를 위해 여러 테스크가 포함된다. 예를 ..
[프로그래머스] 방문 길이 문제 방문 길이 (https://programmers.co.kr/learn/courses/30/lessons/49994) 풀이 1. 문제 조건 해석 문제도 직관적이고, 변수 조건도 무난, 아주 심플하다. 2. 알고리즘 U, L, D, R 을 하나씩 입력받으며, 그냥 순차적으로 트래킹하면 된다. visited 를 set 자료구조로 두어, 이미 지나간 길인지 아닌지 체크하면 된다. 주의해야할 점은, 트래킹에는 '단방향성' 이 존재하지만, 길 자체는 '양방향' 이라는 점이다. 3. 코드 def solution(dirs): dxs, dys = [-1, 0, 1, 0], [0, -1, 0, 1] d = {"U": 0, "L":1, "D":2, "R": 3} visited = set()..
[프로그래머스] 가장 먼 노드 문제 가장 먼 노드 (https://programmers.co.kr/learn/courses/30/lessons/49189?language=python3) 풀이 1. 문제조건 해석 먼저, 현재 노드로부터 가장 멀리 떨어진 노드와의 최단거리를 찾는다. 이 최단거리들 중, 가장 큰 값을 가지는 거리의 개수를 찾는 문제다. 2. 알고리즘 전형적인 BFS 문제다. 그냥 다 탐색하면서 거리를 잰 뒤, 마지막에 거리 중 가장 큰 거 개수 세면된다. 진짜 그냥 주어진대로 하면 됨. 3. 코드 from collections import defaultdict, deque def solution(n, edge): dists = {i:0 for i in range(1, n+1)} # 노드 1과 다른 노드들 사이의 거리를 담..
[프로그래머스] 야근 지수 문제 야근지수 (https://programmers.co.kr/learn/courses/30/lessons/12927) 풀이 1. 초기 접근 문제 조건 해석 n은 1,000,000 이하인 자연수입니다. -> 뭔가를 해도, O(n log n) 안으로 끝내야 한다. (for 효율성 테스트) 사실 문제자체는 엄청 간단하다. 직관적으로, 누가 봐도 정렬 후 가장 큰 값만 계속 1씩 빼야될 것 같은데, 문제는, 리스트 내 가장 큰 값을 n 번 루프동안 어떻게 계속해서 찾아낼 것인가다. 리스트로는 택도없다. 왜냐하면 반복문 돌 때마다 정렬할 것인가? 시간복잡도 루프 O(n) 내, 정렬에 O(n log n) 이 나온다. 따라서 불가능. 주목 해야할 것에만 주목하자. 리스트 내 '최대값' 만 필요하다는 ..
[프로그래머스] 가장 큰 수 문제 가장 큰 수 (https://programmers.co.kr/learn/courses/30/lessons/42746) 풀이 1. 초기 접근 조합을 이용하여 완전 탐색. 가장 먼저 떠오르는 직관적인 방법은, numbers 에 있는 모든 변수들을 조합하여 만든 수들 중, 가장 큰 값을 반환하는 것이다. 이럴 경우, 조합하는 시간은 약 O(len(numbers)!) 이다. 그런데, 조건에 보면, 1 < numbers < 100,000 이란다. O(100000!) 은 절대 1초 내로 안들어오므로, 이 알고리즘은 사용할 수 없다. number 를 정렬한다거나, 탐색할 때, O(n log n) 안으로 해결 해야 한다는걸 늘 생각해야 한다. 보통, 이렇게 루프로 시간문제가 걸리는 경우, 배열 내 아이템을 ..
[BOJ] 5430. AC 문제 AC (https://www.acmicpc.net/problem/5430) 풀이 1. 초기 접근 문제조건 해석 배열에 들어있는 수의 개수 n이 주어진다. (0 ≤ n ≤ 100,000) n