728x90 KraftonJungle2기/Today I Learned51 [TIL] Pintos Project1 - Threads 정리 ※ git book 기준으로 이해한 내용 정리 ※ 0. 개념 및 코드 정리 1. thread CPU 이용의 기본 단위, 동일 프로세스의 스레드들은 코드 영역, 데이터 영역, 운영체제 자원들을 공유 핀토스에서는 단일 스레드 프로세스(Single thread process)를 구현! 그러므로 프로세스의 상태변화가 스레드의 상태변화와 동일하다고 생각하고 구현함 이러한 멀티 프로그래밍의 목적은 CPU 사용률을 최대화하기 위함이며, 어떤 프로세스든 항상 실행 중이게 한다. time sharing(시분할 시스템) : 여러 프로세스 사이에서 CPU를 자주 전환함으로써 여러 사용자 프로그램이 수행되는 동안 각 프로그램과 상호작용할 수 있도록 한다. Process scheduler : CPU에서 프로그램 실행을 위해 실.. 2023. 6. 28. [TIL] Pintos - 가상 메모리 관련 개념 공부2 1. 아침 문제 풀이 1. 10026번 - 적록색약 import sys from collections import deque N = int(sys.stdin.readline()) pic = [list(sys.stdin.readline().strip()) for _ in range(N)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y) : queue = deque() queue.append((x, y)) visited[x][y] = True while queue : cx, cy = queue.popleft() for i in range(4) : nx, ny = cx + dx[i], cy + dy[i] if nx >= 0 and nx = 0 .. 2023. 6. 15. [TIL] Pintos - 가상 메모리 관련 개념 공부1 1. 아침 문제 풀이 1. 2023번 - 신기한 소수 import sys N = int(sys.stdin.readline()) result = [] #소수인지 판별하는 함수 def isPrime(n) : for i in range(2, int(n**(1/2))+1) : if n % i == 0 : return False return True #백트래킹 방식을 사용한 탐색 def dfs(depth, n) : if depth == N : if isPrime(n) : result.append(n) return for i in range(10) : nn = n*10 + i if isPrime(nn) : dfs(depth+1, n*10+i) prime = [2, 3, 5, 7] for p in prime : df.. 2023. 6. 14. [TIL] 1377번 - 버블 정렬 1. 1377번 - 버블 정렬 import sys N = int(sys.stdin.readline()) array = [[int(sys.stdin.readline()), i] for i in range(N)] array.sort() max = -sys.maxsize for i in range(N) : t = array[i][1] - i if max < t : max = t print(max+1) 이 문제는 버블 정렬시 완료되는 반복 횟수를 구하는 문제이다. 주어진 c++ 코드로도 답은 구할 수 있지만 시간초과가 발생했다. 즉, 이중 반복문을 제거할 수 있어야 한다. 위의 그림은 버블 정렬 과정을 써본 것이다. 버블 정렬은 맨 뒤에서 부터 큰 값이 먼저 정렬된다. 그러므로 정렬되지 않은 값 중 가장 큰 값.. 2023. 6. 7. [TIL] OS - System Call 1. 운영체제 서비스(Operating System Service) 사용자에게 도움을 주기 위한 기능 사용자 인터페이스(User Interface) GUI(그래픽 사용자 인터페이스) CLI(명령어 라인 인터페이스) Batch Interface(일괄처리 인터페이스) https://ko.wikipedia.org/wiki/사용자_인터페이스 프로그램 수행(Program Execution) 프로그램을 메모리에 적재(load)해 구동(Run)하고 실행(Execute)할 수 있어야 한다. 정상적이든 비정상적이든 실행을 끝낼 수 있어야 한다. 입출력 연산(I/O Operation) 수행 중인 프로그램은 입출력을 요구할 수 있다. 효율과 보호를 위해 사용자들이 직접 제어를 할 수 없으므로 운영체제가 수단 제공 통신(Co.. 2023. 6. 7. [TIL] OS 용어 정리 1. 아침 문제 풀이 1. 1049번 - 기타줄 import sys N, M = map(int, sys.stdin.readline().split()) min_six = sys.maxsize min_one = sys.maxsize # 가장 작은 가격 구하기 for _ in range(M) : six, one = map(int, sys.stdin.readline().split()) if min_six > six : min_six = six if min_one > one : min_one = one count = N // 6 + 1 #6의 배수가 되도록하면서 적어도 N보다 큰 몫 구하기 a = min_six * count # 묶음으로만 구매할 경우 b = min_one * N #낱개로만 구매할 경우 c = m.. 2023. 5. 26. [TIL] Thread 개념 정리 1. 아침 문제 풀이 1. 26069번 - 붙임성 좋은 총총이 import sys N = int(sys.stdin.readline()) dance = {'ChongChong' : 1} for _ in range(N) : a, b = sys.stdin.readline().split() # 두 사람 중 한 사람만 춤을 추고 있는 경우를 나눠 dance 목록에 저장 if a in dance and b not in dance: dance[b] = 1 elif a not in dance and b in dance : dance[a] = 1 print(len(dance)) 가볍게 Dictionary를 이용해 푼 문제 2. Thread 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위 프로세스의 c.. 2023. 5. 25. [TIL] 7주차 - 넘겼던 부분 동료학습 정리 1. 아침 문제 풀이 1. 2559번 - 수열 - 2023.05.24 import sys N, K = map(int, sys.stdin.readline().split()) nums = list(map(int, sys.stdin.readline().split())) result = sum(nums[:K]) # 구해야할 값 curr = result # 현재 0부터 K-1까지 연속된 값의 합 for i in range(K, N) : curr = curr - nums[i-K] + nums[i] # 맨앞의 값은 빼고 뒤에 값 추가(슬라이딩 윈도우) if curr > result : result = curr print(result) 전에 공부했던 슬라이딩 윈도우를 사용하여 푼 문제 요즘 점점 풀수록 어떤 알고리즘을.. 2023. 5. 24. [TIL] Proxy 개념 정리 1. 아침 문제 풀이 1. 2108번 - 통계학 import sys import math N = int(sys.stdin.readline().strip()) nums = {} # 입력받은 수들의 등장 횟수 lst = [0] * N # 입력받은 수들 sum = 0 for i in range(N) : num = int(sys.stdin.readline().strip()) if num in nums : nums[num] += 1 else : nums[num] = 1 lst[i] = num sum += num lst.sort() nums = dict(sorted(nums.items())) nums = sorted(nums.items(), key= lambda x : -x[1]) print(round(sum/N).. 2023. 5. 24. [TIL] CSAPP 11장 공부4 - tiny 서버 정리 1. 아침 문제 풀이 1. 20920번 - 영단어 암기는 괴로워 import sys N, M = map(int, sys.stdin.readline().split()) words = {} # key = 영어단어 / value = 영어단어 입력 횟수 for _ in range(N) : w = sys.stdin.readline().strip() if len(w) >= M : if w in words : words[w] += 1 else : words[w] = 1 # 단어를 사전 순으로 정렬 words = dict(sorted(words.items())) # 단어를 입력 횟수가 많은 순으로 정렬하되 같으면 길이가 긴 것부터 정렬 words = dict(sorted(words.items(), key=lambda .. 2023. 5. 22. [TIL] CSAPP 11장 공부3 - 웹 서버 1. Web 기초 1. HTTP(Hypertext Transfer Protocol) 웹 상에서 웹 서버 및 웹 브라우저(클라이언트) 상호 간의 데이터 전송을 위한 응용(계층 프로토콜 텍스트 기반 응용수준 프로토콜로 주로 HTML 문서를 주고받는데 사용된다. https://ko.wikipedia.org/wiki/HTTP 웹 서버 포트 번호 : 80 요청/응답(Request/Response) 프로토콜 클라이언트 → 서버 : 콘텐츠 요청 서버 → 클라이언트 : 요청받은 콘텐츠로 응답 🔗 http://www.ktword.co.kr/test/view/view.php?m_temp1=4884&id=902 HTTP Method 클라이언트가 웹 서버에게 요청하는 목적 및 그 종류를 알리는 수단 GET : 리.. 2023. 5. 21. [TIL] CSAPP 11장 공부2 - 예제 echo 서버 1. 상위 수준의 도움 함수 1. open_clientfd() 클라이언트는 이 함수를 호출하여 서버와 연결을 설정한다. 2. open_listenfd() 서버는 이 함수를 호출해서 연결 요청을 받을 준비가 된 듣기 식별자 생성 ▶ setsockopt() : 소켓 세부 사항 설정 int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); sock : 소켓 파일 디스크립터 level : 프로토콜 레벨 전달 SOL_SOCKET : 일반 IPPROTO_IP : IP - IPv4 IPPROTO_TCP : TCP optname : 변경할 옵션의 이름 SO_REUSEADDR : 이미 사용중인 주소나 포트에 대해서도 바인.. 2023. 5. 20. [TIL] CSAPP 11장 공부 - 네트워크 1. 아침 문제 풀이 1. 1966번 - 프린터 큐 - 2023.05.18 import sys from collections import deque testcase = int(sys.stdin.readline()) for _ in range(testcase) : N, M = map(int, sys.stdin.readline().split()) priorty = list(map(int, sys.stdin.readline().split())) queue = deque() for i in range(N) : queue.append((i, priorty[i])) # 원래 위치와 중요도를 같이 큐에 넣어준다. count = 0 while queue : flag = True #True일 경우 출력 가능 / Fals.. 2023. 5. 19. [TIL] CASPP 9장 공부5 - 간단한 할당기3(segregated) 1. 아침 문제 풀이 1. 1359번 - 복권 import sys from itertools import combinations N, M, K = map(int, sys.stdin.readline().split()) jimin = list(combinations(range(N), M)) # 지민이가 뽑을 수들의 조합 result = list(combinations(range(N), M)) # 당첨 결과들의 조합 luck = 0 # 당첨된 횟수 저장 for jm in jimin : for re in result : count = 0 # 현재 지민이와 결과가 같은 수의 개수 for i in range(M) : for j in range(M) : if jm[i] == re[j] : count += 1 if c.. 2023. 5. 17. [TIL] CSAPP 9장 공부5 - segregated list(개념 공부) 1. 아침 문제 풀이 1. 1057번 - 토너먼트 import sys N, kim, im = map(int, sys.stdin.readline().split()) count = 0 flag = True if N % 2 == 0 : #참가자가 홀수일 경우 N += 1 while N > 0 : # 다음 경기에서의 번호 구하기 if kim % 2 == 0 and im % 2 == 0: kim //= 2 im //= 2 elif kim % 2 != 0 and im % 2 == 0: kim = (kim+1) //2 im //= 2 elif kim % 2 == 0 and im % 2 != 0: kim //= 2 im = (im+1) //2 else : kim = (kim+1) //2 im = (im+1) //2 c.. 2023. 5. 16. [TIL] CSAPP 9장 공부4 - 간단한 할당기2(Explicit, first-fit) 1. 아침 문제 풀이 1. 25192번 - 인사성 밝은 곰곰이 import sys N = int(sys.stdin.readline()) record = {} count = 0 for _ in range(N) : input = sys.stdin.readline().strip() if input == 'ENTER' : record = {} # 모든 기록 초기화 elif input not in record : count += 1 record[input] = 1 print(count) 아침마다 같이 공부하는 사람들끼리 문제를 풀고 있다. 오늘 문제는 좀 귀여웠다. 저번 금요일의 문제 풀이에 이어서 Hash를 사용하여 풀면 된다. 2. Explicit Free List 명시적 가용 리스트 1. 묵시적 가용 리스트.. 2023. 5. 15. [TIL] CSAPP 9장 공부3 - next-fit 1. 알고리즘 문제 풀이 1. 1107번 - 리모컨 import sys N = int(sys.stdin.readline()) #목표 채널 M = int(sys.stdin.readline()) # 망가진 번호 수 brocken = {} if M : for i in list(sys.stdin.readline().split()) : brocken[i] = 1 count = abs(100 - N) # + 또는 - 로만 움직였을 때 횟수 if count != 0 : # 이미 목표 채널이 아닐 경우만 반복 for i in range(1000001) : num = str(i) #현재 채널 번호 length = len(num) for j in range(length) : if num[j] in brocken : #채널.. 2023. 5. 14. [TIL] CSAPP 9장 공부3 - 간단한 할당기(Implicit, first-fit) 1. 아침 문제 풀이 1. 10026번 - 적록색약 import sys from collections import deque N = int(sys.stdin.readline()) graph = [list(sys.stdin.readline().strip()) for _ in range(N)] color_count = 0 color_weakness = 0 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y) : #색약이 아닌 사람이 보는 구역 global color_count, color_weakness queue = deque() visited[x][y] = 1 queue.append((x,y)) while queue : curx, cury = queue.poplef.. 2023. 5. 14. 이전 1 2 3 다음 728x90