본문 바로가기

전체 글

(24)
파이썬에서 자료구조 이해가 코딩 테스트 및 알고리즘 성능 (시간복잡도)에 미치는 영향 주의) 제목은 거창하지만 본 내용은 노 베이스 비전공자 출신인 본인에게만 새롭고 유용한 내용이고 자료구조에 대해 빠삭한 사람에겐 너무 당연해서 어이없는 얘기. 본인과 같이 근본 없는 코딩 어린이는 코딩 문제를 파이썬으로 풀 때 가장 만만한 게 list 형태라고 느껴져 list를 참 많이 쓰는데 list에서 스택 형태의 참조나 연산을 할 때는 괜찮지만 큐 형태의 연산을 할 때는 주의가 필요하다. 이게 무슨 소리인고 하니 큐는 그림과 같은 구조로 데이터 삽입을 뒤에서 하면 삭제는 반대로 앞에서 하는 구조로 다시 말하자면 큐(queue)는 들어간 쪽과 나온 쪽 양쪽이 뚫려서 처음 들어간 게 쭉쭉 밀려서 앞쪽으로 나오고 그다음 들어간 게 그다음 앞으로 나오게 되는 FIFO (First In First Out)의..
백준 1181- 단어정렬 (딕셔너리 사용법과 sorted의 lambda 람다) 딕셔너리를 정의하는 방법에는 다음과 같은 방법들이 있다. dict_ex1과 같이 정석적인 방법, dict_ex2와 dict_ex3와 같이 한쌍의 키와 벨류로 이루어진 튜플을 구성하여 dict으로 바꾸는 방법. 백준을 좀 하다보니 이제와서야 딕셔너리가 문제 풀이에 효과적임을 깨닫고 있다;; 다음은 딕셔너리를 이용해 1181번을 해결한 코드이다. # 백준 1181(내거) import sys N=int(input()) li=[] for _ in range(N): li.append(sys.stdin.readline().rstrip()) li=list(set(li)) li_dic=sorted(li) leng=len(li) li_new={li_dic[i]:len(li_dic[i])*leng+i for i in ra..
스케줄링 알고리즘- FCFS(=FIFO) 스케줄링, SJF 스케줄링 FCFS는 Fisrt-Come First-Served의 약자로 프로세스를 어떤 순서로 cpu에 올려줄까? 하면 가장 쉽게 떠올릴 수 있는 방법이다. (선착순) 식당에 가서 주문하면 주문한 순서대로 음식을 내어주는 것과 마찬가지로 먼저 준비큐에 도착한 프로세스가 디스패치 (프로세스가 cpu로 올라가 준비->실행됨) 된다. FCFS 스케줄링은 비선점 방식으로 가장 간단하지만 대기시간과 반환시간 기준으로 성능을 평가했을때 그리 보통 성능이 좋은 알고리즘은 아니다. 게다가 비선점 방식인 만큼 아무래도 교착상태의 위험이...; 또한 D같이 잠깐만 실행하면 끝나는 프로세스가 늦게 도착하면 세월아 내월아 기다려야 하니 아무래도 평균적으로 성능이 좋지 못함 여기서 비선점 방식이라는 것은 하나의 프로세스가 종료 전, 실..
방통대 2021 운영체제 중간과제물- 운영체제란? 그리고 스케쥴링에 관해 방통대에 들어온 첫 학기라 어떻게 과제를 해야할지 감이 대충 안왔는데 나와 같은 기분을 느끼는 사람들에게 대략의 reference를 제공한다. 참고로 표절 검사를 하기 때문에 참고만 바람. 과제 점수는 30점 만점에 30점이 나왔으나 내용상으로 충실한지는 확신 없음. 1. (1) 운영체제의 역할을 설명하시오. => 컴퓨터의 RAM이나 CPU등 하드웨어 자원이 한정적이므로, 이 한정된 자원을 관리하고 제어하는 역할. 컴퓨터의 하드웨어 (기계)가 사람이 쓴 프로그램 파일을 이해할 수 있게 해주고 프로그램 파일이 프로세스가 될 수 있도록 메모리에 올려주는 등의 역할을 한다. 메모리에 얼마나 자원이 남았는지를 체크하여 새로운 프로세스가 들어오면 할당도 해주고 때로는 스케쥴링 방식에 따라서 다시 회수도 하며 메모..
백준 11729풀이와 해설 - 하노이탑 쌓기 def cnt(N): #몇번 옮기는지 세어주는 함수 N_time=1 for i in range(1,N): N_time=N_time*2+1 print(N_time) def move(N,start,fin): #어떤 순서로 탑에서 탑으로 이동하는지 나타내주는 함수 wait= list({1,2,3}-{start}-{fin})[0] #1,2,3중에 start와 fin빼고 남는거 if N>=2: move(N-1,start,wait) print("{0} {1}".format(start,fin)) move(N-1,wait,fin) if N==1: print("{0} {1}".format(start,fin)) disk_num=int(input()) cnt(disk_num) #몇번 움직이는지 먼저 출력 move(disk_..
python에서 ctrl+6 (^)처럼 제곱 표현하기 백준에서 두 원의 교점을 찾는 코딩을 간만에 하다가 ((x1-x2)^2+(y1-y2)^2)==(r1+r2)^2 과 같이 써서 표현하니 True가 반환되야할 지점에서 자꾸 False가 나와서 봤더니 ((x1-x2)**2+(y1-y2)**2)==(r1+r2)**2 아맞다 아래식처럼 python에서 제곱근은 ^이 아니라 **이라고 쓰는걸 깜박하고 있었다;; 오늘도 뻘짓 적립
Python 중괄호와 소괄호의 차이 대부분의 프로그래밍 언어에서 그렇겠지만 python에서 중괄호 [] 와 소괄호 ()는 혼동해서 쓰면 안되는 완전히 다른 것이다. 주로 중괄호는 배열 (array)를 구성할 때, 또한 배열의 특정 인덱스에 접근할 때 등등 이용하고 소괄호는 연산의 순서를 정해주고 싶을때, 개체의 메소드와 속성을 이용할 때 등등 사용하게 된다. 나도 아직 익숙하지도 않은지라 두 개를 자꾸 혼동해서 쓰곤 하는데 당신은 다음의 혼동을 쉽게 피할 수 있을 것이다. if False == False: print("True") #결과는 True. 위의 if문을 boolean 판정문으로 사용해서 False == False 값을 받아보면 당연히 True가 나온다. if 0 in [1,2,3]: print("True") else: print..
[CPU의 프로세스와 스레드 차이] 코어는 몇 개? 스레드가 몇 개?무슨 차이가 있을까 먼저 프로세스와 쓰레드의 사전적 정의는 무엇일까? 프로세스: 컴퓨터 분야에서 무엇인가를 처리, 가공하는 기능을 가진 하드웨어, 소프트웨어로 대표적으로 CPU가 있다. (출처 : 사이언스올 과학사전) 스레드(thread) : 다중 작업 환경에서 운영 체제가 여러 프로그램을 병행하여 처리할 때 효율적인 처리를 위하여 분할한 처리 단위 (출처 :네이버 사전) 네이버를 검색하면 위와 같이 검색 결과가 나온다. 흠 대충 둘 다 무언가 처리하는 단위인 거 같긴 한데 당최 뭐가 다른지 알 수 없다. 특히 스레드는 다른 말로 논리 프로세서라고도 하던데 프로세스를 진행하는 프로세서를 병렬 처리를 위해 논리적으로 구성한 건가? 하는 피상적인 이해만 갔었는데.. 운영체제 수업을 들으며 나름대로 그 전보다는 프로세서 (주로 ..