본문 바로가기

분류 전체보기71

[ 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.