본문 바로가기

전체 글71

[ OS 기초 ] 04. 프로세스 스케줄링 01. 프로세스 스케줄링의 개념 02. 스케줄링의 기준 03. 스케줄링 단계(level) 04. 스케줄링 정책 00 도입 앞서 배웠던 내용을 간단히 정리해보면, 프로세스는 자원을 할당받아 목적을 달성하기 위한 작업을 수행한다. 운영체제는 다양한 방식으로 프로세스를 처리한다 (일괄처리, 시분할 등등) 다중 프로그래밍 시스템에서는 여러 프로세스를 동시에 처리해야 한다 이때 운영체제가 어떤 프로세스에세 어떤 자원을 먼저 할당해줄지 결정하는게 스케줄링 01 프로세스 스케줄링 우리가 사용하는 시스템은 멀티 프로그래밍 시스템으로 여러 프로세스를 동시에 실행한다. 프로세스가 여러개인만큼 자원인 프로세서(cpu)를 번갈아가면서 사용해야한다. 따라서, 각 프로세스 수행을 위한 cpu를 할당해야 하는데(=자원을 나누어 사.. 2021. 6. 24.
[ SWEA ] D2 - 1983, 1979, 1976, 1974 - python 문제풀이 1983 조교의 성적매기기 scores = ["A+","A0","A-","B+","B0","B-","C+","C0","C-","D"] for tc in range(int(input())): N,K = map(int, input().split()) # i번째 점수는 (i+1)번 학생의 점수 info = [list(map(int, input().split())) for _ in range(N)] student_scores = [] for i in range(N): total = info[i][0]*0.35 + info[i][1]*0.45 + info[i][2]*0.2 student_scores.append([total, (i+1)]) student_scores.sort(key=lambda x:x[0],rev.. 2021. 6. 24.
[ SWEA ] D2 - 2001, 1989, 1986, 1984 - python 문제풀이 2001 파리퇴치 퇴치할 파리 정사각형이 어디까지 이동할 수 있을 지 파악해서 갈 수 있는 곳 까지만 for문을 도는게 그나마 시간을 조금이라도 줄이는 방법 for tc in range(int(input())): N,M = map(int, input().split()) fly = [list(map(int, input().split())) for _ in range(N)] max_value = 0 for i in range(N-M+1): for j in range(N-M+1): row_idx = i col_idx = j tmp = 0 for k in range(M): tmp += sum(fly[row_idx+k][col_idx:col_idx+M]) if tmp > max_value: max_value = .. 2021. 6. 24.
[ SWEA ] D2 - 1859, 1926, 2007, 2005 - python 문제풀이 1859 백만장자프로젝트 문제를 먼저 잘 이해하고 생각한 뒤 풀면 생각보다 쉽게 풀리는 문제 Idea 1. 일단, 최대의 이익을 내려면 계속 사다가 가장 비싸게 팔 수 있는 시점에 팔아야 한다. Idea 2. 배열을 뒤에서 부터 순회하면서, 특정 시점에서 얼마에 파는게 가장 최대일지 구하면 된다 - 제일 마지막 순간에 팔 수 있는 가격을 초기값으로 설정 - 뒤에서부터 오면서, 더 비싸게 팔 수 있는 순간이 올 경우(t2) 최대값으로 가격을 갱신해주기 - 더 비싸게 팔 수 있는 순간이 아니라면, 사는게 무조건 이득임 for tc in range(int(input())): N = int(input()) data = list(map(int, input().split())) max_value = 0 curmax.. 2021. 6. 24.
[ OS 기초 ] 03. 스레드 관리 1. 스레드의 개념 2. 스레드의 구현 00 도입 스레드에 들어가기 전 기본 개념을 한 번 더 짚어보면 - 작업 : 목적 달성을 위해 필요한 프로그램과 데이터의 묶음 - 프로세스 : 자원을 할당받아 작업을 수행해 목적을 달성하는 것, 할당받은 자원을 제어한다 - 스레드 : 프로세스의 '제어' 부분 01 스레드의 개념 스레드 = 실 (표현 할 때 ~ 로 표현) 프로세스는 자원을 할당받아 이 자원을 제어하며 작업을 수행해나간다. 여러 자원을 할당받았을 때, 이 자원들을 제어 하는 것이 바로 스레드다. 01-1 스레드 프로세스 : 자원을 제어하여 목적 달성을 위해 작업을 수행하는 것 스레드는 여기서 제어에 해당하는데, 자원은 공유하고 있기 때문에 가벼운 프로세스(Light Weight Process)라 불린다.. 2021. 6. 23.
[ SQL 고득점 kit ] IS NULL - mysql 01 이름이 없는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID; ( 프로그래머스에서는 이미 ID순으로 정렬이 되어있어서 마지막 코드가 없어도 통과는 되지만, 문제 조건에 ID 순 정렬을 요구하고 있으므로 써주는 게 더 정확 ) 02 이름이 있는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID; 또는 NOT의 위치를 앞으로 가져와서 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NOT NAME IS NULL ORDER BY ANIMAL_ID; 03 NULL 처리하기 데이터베이스 자체를 바꾸.. 2021. 6. 23.
[ OS 기초 ] 02. 프로세스 관리 1. 프로세스와 JOB의 차이 2. 프로세스의 정의와 종류 3. 관련 개념(자원, PCB) 4. 프로세스의 상태 5. 인터럽트와 문맥교환(context swithcing) 00 도입 프로세스를 아주 단순화하면 '실행의 주체'다. 평소 컴퓨터를 쓰다가 응답이 없을 때 ctrl+alt+delete 클릭해서 열어보는 작업관리자에서도 프로세스와 각 프로세스가 얼마나 cpu를 할당받고, 메모리를 사용하고 있는지 확인할 수 있다. 운영체제의 주 기능 중 하나인 프로세스 관리에 대해 알아보기 위해 먼저 프로세스란 무엇이며, 어떤 방식으로 프로세스가 동작하는지(프로그램이 실행되는지, 작업이 수행되는지) 이해한 뒤 인터럽트의 개념까지 살펴보았다. 01 프로세스 프로세스를 이해하려면 먼저 Job(작업)의 개념도 알아야 한.. 2021. 6. 23.
[ SWEA ] D1 풀이 모음 - python 2072 홀수만 더하기 for tc in range(int(input())): a = list(map(int, input().split())) s = 0 for i in range(10): if a[i]%2!=0: s += a[i] print("#{} {}".format(tc+1, s)) 2071 평균값구하기 for tc in range(int(input())): a = list(map(int, input().split())) print("#{} {}".format(tc+1, round(sum(a)/10))) 2070 큰놈,작은놈,같은놈 for tc in range(int(input())): a,b = map(int, input().split()) print("#{} ".format(tc+1), end=.. 2021. 6. 23.
[ SQL 고득점 kit ] GROUP BY - mysql 01 고양이와 개는 몇 마리 있을까 IN 조건 또는 OR 조건으로 다양하게 풀이 가능 SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS WHERE ANIMAL_TYPE IN ('Cat', 'Dog') GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE; or SELECT ANIMAL_TYPE,count(*) as 'count' FROM ANIMAL_INS WHERE ANIMAL_TYPE='Cat' or ANIMAL_TYPE='Dog' GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE 02 동명 동물 수 찾기 GROUP 으로 묶은 결과 자체에 대해 조건을 걸려면? - WHERE가 아니라 HAVI.. 2021. 6. 22.
[ SQL 고득점 kit ] SUM, MAX, MIN - mysql 01 최댓값 구하기 SELECT MAX(DATETIME) as 시간 FROM ANIMAL_INS; or SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1; 02 최솟값 구하기 SELECT MIN(DATETIME) AS 시간 FROM ANIMAL_INS; or SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1; 03 동물 수 구하기 SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1; or SELECT COUNT(*) FROM ANIMAL_INS; 04 중복 제거하기 문제 조건 잘 확인(-NULL인 경우는 집계하지 않으며-),.. 2021. 6. 22.
[ SQL 고득점 kit ] SELECT - mysql 01 모든 레코드 조회하기 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID; 02 역순 정렬하기 : 정렬은 ORDER BY, 순서는 DESC(내림차순-큰값부터) or ASC(오름차순-기본값) SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC; 03 아픈 동물 찾기 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick' ORDER BY ANIMAL_ID; 04 어린 동물 찾기 : 같지 않다 (NOT, !=, ) SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NOT INTAKE_CONDITION='Aged' ORD.. 2021. 6. 21.
[ OS 기초 ] 01. OS개요(2) 1. 운영체제의 구조(내부) 2. 운영체제의 기능 00 도입 복습 : 운영체제는 하드웨어를 잘 관리해 사용자와 응용 어플리케이션 프로그램에 서비스를 제공하는 것 01 운영체제의 구조 운영체제는 크게 커널과 유틸리티로 나눌 수 있다 01-1 커널 단어 의미 그대로 알맹이, 즉 핵심이다. 커널은 우리가 가장 자주 사용하는 핵심 기능(프로세서, 메모리 관리 등)을 모아놓은 부분이다. 이러한 기능들은 항상 사용하는 기능이라서 메모리에 상주하고 있어 상주 프로그램, 핵, 관리자 프로그램, 제어 프로그램 등으로 불린다. 02-2 유틸리티 유틸리티는 운영체제에서 커널을 제외한 부분으로, 자주 사용하지는 않지만 가끔씩 사용하기때문에 비상주 프로그램에 속한다. 이들 프로그램은 필요할 때만 메모리에 올려서 실행한다. 이를.. 2021. 6. 21.
[ OS 기초 ] 01. OS개요 1. 운영체제의 역할에 대한 간단한 정리 2. 운영체제가 컴퓨터 상에서 어디에 위치하며, 운영체제는 어떤 방식으로 작동하는지 3. 운영체제에는 어떤 것들이 있는지 00 도입 운영체제를 한 마디로 정리하면 '하드웨어를 잘 관리해서 유저와 응용 프로그램에 서비스를 제공' 해주는 컴퓨터 시스템이다. 이때 '잘 관리한다'의 '잘'은 항상 상대적으로 쓸 수 있는 표현이다. 무언가 전보다 더 나아졌으면 이전보다 잘했다고 볼 수 있는 것처럼. 운영체제도 마찬가지로 과거에 사용하던 운영체제의 문제를 개선하면서 점점 발전해왔다. 이 과정을 살펴보면서 운영체제의 작업 수행방식에 따라 종류를 나눠 살펴보고 다른 기준에 따라서 구분할 수 있는 운영체제의 종류도 살펴보았다. 01 운영체제의 역할 운영체제 : 하드웨어를 잘 관리.. 2021. 6. 20.
[ Codility ] MaxProductOfThree - python 개념 Lesson 6. Sorting 두 번째 문제 문제요약 입력으로 주어진 정수 배열에서 숫자 3개를 곱한 값 중 최대를 리턴하라 첫번째 접근(효율성 고려X) 문제에 충실히 만들수 있는 모든 인덱스 조합을 만들고, 그 조합대로 값을 곱한 뒤 최대일 경우 max-value값을 갱신해주는 코드(3개니까 당연히 3중 for문을 돌고, 시간복잡도는 O(N**3)이상) def solution(A): max_v = A[0]*A[1]*A[2] for i in range(len(A)-2): for j in range(i+1, len(A)-1): for k in range(j+1,len(A)): if A[i]*A[j]*A[k]>max_v: max_v = A[i]*A[j]*A[k] return max_v 두번째 접근(통.. 2021. 6. 18.
[ Codility ] Distinct - python 개념 Lesson 6. Sorting 첫 번째 문제 문제요약 N개의 정수를 원소로 갖는 배열A가 입력으로 주어질 때, 원소들의 중복을 제외한 총 개수를 리턴하라 첫 번째 접근 (효율성 고려X, 통과는 O) 파이썬 내장함수를 이용한 풀이(set로 중복 제거한뒤 그 개수만 리턴하는 코드) # 방법 1 def solution(A): return len(list(set(A))) # 방법 2 - 굳이 list를 안해도 돼 ㅎㅁㅎ def solution(A): return len(set(A)) 생각보다 너무 빨리 대충 푼 것 같은 느낌에 set 쓰지 않고 푸는 다양한 방식을 찾아보기로 했다 두 번째 접근 (효율성X) 처음 파이썬을 배웠다면 썼을 것 같은 코드로 문제에 충실하게 짠 코드. A를 쭉 돌다가 지금까지 나.. 2021. 6. 18.
[ Git ] git bash 주요 명령어 정리 shell 기초 명령어 pwd : (print working directory) 현재 위치 확인 ls : 현 위치에 있는 파일들 확인 clear : 쉘 청소(앞서 입력한 내용지우기) mkdir : 현 위치에 새로운 폴더 만들기 mkdir hello : 현 위치에 hello라는 새로운 폴더 생성 touch a.txt : 현 위치에 a.txt라는 텍스트 파일 생성 echo : 문자열 출력 echo "hello" > a.txt : a.txt파일에 hello라는 문자열 삽입 cat : 확인용 명령어 cat a.txt : hello 출력됨 cd : 특정 위치로 이동 cd hello/ : hello 라는 폴더로 이동 cd .. : 상위 폴더로 이동 cp : 파일 복사 cp a.txt hello/ : hello라는 .. 2021. 6. 18.
[ OS 기초 ] 00. CS 개요 1. 컴퓨터, 어떻게 돌아가는걸까 2. 그럼 OS가 그 과정에서 담당하는 역할은? 3. 컴퓨터 하드웨어와 OS의 관계 - 프로세서, 메모리, 주변장치를 중심으로 00 도입 컴퓨터에 저장되어있는 영화를 볼 때 우리는 원하는 영화 파일을 마우스로 클릭하고 기다리면 화면에 비디오 플레이어가 뜨며 영상을 볼 수 있게 된다. 이 클릭을 통해 전달된 어떤 정보가 컴퓨터 내부에서 어떤 과정을 거쳐, 컴퓨터 어딘가에 저장되어있던 영화를 불러와 내가 보는 모니터에 띄워주는 과정을 거친 것이다. 컴퓨터에 대해 잘 몰라도 컴퓨터 안에 여러 물리적인 장치들이 있다는 것, 그리고 이 물리적인 장치들이 서로 통신을 하고 특정 작업을 한다는 건 알 수 있다. 이때 이 물리적인 장치를 하드웨어라 통칭하는데, 넓은 관점에서 이 하드웨.. 2021. 6. 17.
[ Codility ] PassingCars - python 개념 Lesson 5. Prefix Sums 네 번째 문제 문제요약 0,1로만 이루어진 배열A가 입력으로 주어짐. 0은 동쪽으로 가는 차, 1은 서쪽으로 가는 차일때 서로 마주칠 수 있는 케이스는 얼마나 되는지 리턴하는 문제. 예시) [0,1,0,1,1] => (0,1),(0,3),(0,4),(2,3),(2,4) 5개 => 5리턴 첫번째 접근( 효율성 고려X ) 문제에 충실하게, 앞에서부터 순회하다가 0이 나오면 그 뒤에 있는 1의 개수를 구해 더해나가는 방식 def solution(A): cnt = 0 for i in range(len(A)-1): tmp = 0 if A[i] == 0: tmp += A[i+1:].count(1) cnt += tmp return cnt 답은 맞지만 역시 타임아웃. for.. 2021. 6. 17.
[ Codility ] MinAvgTwoSlice - python 개념 Lesson 5. Prefix Sums 세 번째 문제 문제요약 n개의 원소를 갖는 리스트가 주어지면, 0부터 n-1사이에서 두 수를 뽑아 작은 값(P)를 시작인덱스, 큰 값(Q)를 끝인덱스로 정해 A[P:Q+1]에 해당하는 리스트를 슬라이스라고 한다. 만들 수 있는 모든 슬라이스 중 슬라이스 내부 원소들의 평균이 가장 낮을때의 P값(시작인덱스)를 리턴. 첫 번째 접근(효율성 고려X) def solution(A): n = len(A) min_v = sum(A)/n r = 0 comb = [(i,j) for i in range(n-1) for j in range(i+1,n)] for pair in comb: new_v = sum(A[pair[0]:(pair[1]+1)])/(pair[1]-pair[0]+.. 2021. 6. 16.
[ 용어정리 ] 컴파일(Compile) 이란? 사전적 의미 : 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다 (출처: 위키백과) 초간단 요약 : 소스코드를 컴퓨터가 이해할 수 있는 바이너리 코드로 변환하는 작업 (즉, 내가 짠 코드를 컴퓨터가 이해할 수 있게 번역하는 과정) - 참고로 바이너리 파일은 컴퓨터가 이해할 수 있는 0,1로 구성된 파일을 의미 예시(?) 대표적인 컴파일언어 : C 아래와 같은 c언어 소스코드가 hello.c 라는 파일에 담겨있을 때 컴파일 시키는 방법은 다음과 같다 #include int main() { printf("Hello World\n"); } 1. 이 코드를 컴파일하기 위한 명령어는 $ clang -o hello hello.c 혹은 (위 방법 보다는 아래 mak.. 2021. 6. 16.
[ 용어정리 ] Syntactic Sugar 란? 사전적 의미 : 컴퓨터 과학에서 통사론 설탕은 일을 더 쉽게 읽고 표현할 수 있도록 설계된 프로그래밍 언어 내의 구문(출처: 위키백과) 초간단 요약 : (같은 기능이지만) 코드를 더 간결하거나 쉽게 표현하는 방식을 의미 예시 정수형 변수 i를 선언하고, i에 1을 더하는 코드를 c언어로 구현하면? 원래 코드 #include int main() { int i = 0; i = i + 1; } Syntactic Sugar를 활용한 코드 #include int main() { int i = 0; i++; } 2021. 6. 16.
[ Codility ] CountDiv - python 개념 Lesson 5. Prefix Sums 첫 번째 문제 문제요약 입력으로 정수 A, B, K가 주어졌을 때 정수 A부터 정수 B(를 포함해서) 사이에 있는 정수들 중 K로 나누어 떨어지는 수들의 총 개수를 리턴하라 첫번째 접근(효율성 고려X) 문제에서 풀이한 방식 그대로 코드 구현 def solution(A, B, K): sn = A # 01 starting number를 A로 설정 cnt = 0 while sn 2021. 6. 15.
[ Codility ] GenomicRangeQuery - python 개념 Lesson 5. Prefix Sums 두 번째 문제 문제요약 A,C,G,T 네 종류의 dna 시퀀스가 있고, 각각 1,2,3,4 의 impact factors를 갖고 있음. 네 알파벳이 섞인 문자열 S와 시작 인덱스 범위를 원소로 갖는 리스트 P, 마지막 인덱스 범위를 원소로 갖는 리스트 Q가 입력으로 주어짐. P와 Q의 동일 인덱스 값이 각각 문자열에서 확인할 인덱스의 시작범위와 끝 범위를 의미함. 처음 주어진 문자열에서 P,Q에 주어진 범위 인덱스만을 볼 때 가장 impact factor가 작은 값을 리스트에 담아 리턴하면 됨. ( 결과적으로 리스트에는 P 또는 Q의 원소 개수 만큼 값이 들어있음 ) 첫번째 접근(효율성 고려X) 문제에서 풀이한 방식 그대로 코드 구현 def solution(S.. 2021. 6. 15.