본문 바로가기

전체 글

(73)
백준 #1541 괄호를 잘쳐서 최소값으로 만드는 문제. -를 만나면 다음 -를 만날때까지 괄호를 치는게 최적의 해이다. 원래는 그리디 알고리즘으로 정당성을 증명해야하지만 그냥 직관적으로 봐도 자명한 사실이라 생략한다. import sys fomula = list(map(str,sys.stdin.readline().split('-'))) def listsum(lst): lst1=str(lst).split('+') sum = 0 for i in lst1: sum+=int(i) return sum sum = 0 sum +=listsum(fomula[0]) for i in range(1,len(fomula)): sum-=listsum(fomula[i]) print(sum) 파이썬에는 신기하고 편리한 방법이 많은거같다.
백준 #1931 문제풀이는 세가지로 생각할수 있다. 시작시간이 빠른 순서대로 끝나는 시간이 빠른 순서대로 시작과 끝의 차이가 작은 순서대로 1,3은 간단히 생각해도 반례가 존재해서 2번으로 풀어야 할 것 같다. 2번 방법에 대한 최적여부를 검증해보자. 첫번째는 종료시간이 빠른 값이 최적해에 포함됨을 증명하는 것이다. 종료시간과 관계없는 최적해 S가 있다고 가정하자. 만약 S[0]을 빼고 종료시간이 빠른 값을 넣는다면 S >= S'이므로 귀류법으로 증명 가능하다. 두번째는 최적 부분 구조의 속성이다. 부분에서 최적해를 구하는것이 전체 최적해임을 증명해야한다. 근데 이건 문제 특성상 하나를 선택했을 때 그 나머지를 선택하는데 영향을 주지 않으므로 당연하게 알 수 있다. 이 둘을 합치면 첫번째 선택을 할 때 종료시간이 빠른 ..
Deadlock Deadlock이란? 각 프로세스가 서로 기다리기만 하는 상태. 이른바 교착상태이다. Deadlock을 발생시키는 네 가지 조건이 있다. 네가지 조건이 모두 만족했을때 Deadlock이 발생할 가능성이 생김. 현재 os에서 deadlock을 다루는 방법 Deadlock prevention : 위 조건 4가지중 하나라도 만족 안하면 prevention 가능 Deadlock avoidance : 운영체제에서 할당하는 자원이 deadlock이 될 가능성이 있는지 판단해서 알맞게 할당해서 avoidance한다. : 근데 너무 복잡하고 overhead가 너무 커서 요즘 운영체제에서는 지원 안한다. Deadlock detection and recovery : 일단 주고 주기적으로 검사한다. 근데 이것도 안씀. 그럼..
백준 9012번 괄호 일단 본인 코딩 못하니까 절대 참고하지말 것 문제는 간단하다 그냥 왼쪽의 개수가 오른쪽보다 적어지면 안됨 + 마지막에 양쪽 개수 똑같아야 됨 이걸로 풀면 lst = [] n =int(input()) for i in range(0,n): lst.append(str(input())) def fun(lst): str1 = ''.join(lst) left = 0 for i in range(0,len(str1)): if str1[i] == '(': left += 1 else: left -= 1 if left 0: print("NO") else: print("YES") for i in range(0,n): fun(lst[i]) 근데 파이썬으로 input을..
Synchronization 두 개 이상의 threads나 processes간에 shared resource가 있는 경우 syschronization을 고려해줘야한다. 그렇지 않으면 race condition(경쟁상태)이 발생할 수 있음 int withdraw (account, amount) { balance = get_balance (account); balance = balance - amount; put_balance (account, balance); return balance; } shared data에 접근과 수정을 동시에 할 수 없음. 따라서 context switch가 일어나면 균일한 결과 기대할 수 없음 이런 구간을 critical section이라고 부르고 이 section을 관리해줘서 synchronization..
Process Scheduling - 2 FCFS/FIFO 먼저 온거 먼저한다 장점 : fair 하다 starvation 안생긴다. 단점 : wating time이 늘어날 수 있다. (ready queue에서 기다리는 시간) SJF shortest-job-first 짧은 일 먼저한다. average waiting time minimum하다. burst time 예측하는거 완벽하지 못하다. 실제로 거의 안씀. Priority Scheduling priority를 지정하여 먼저한다 어떻게 priority를 지정할건지는 issue priority 지정에 따라 SJF가 될수도 FCFS가 될 수도 있다. 우선순위 스케줄링에서 Non-preemptive, preemptive 두 경우 다 가능. 하는중에 우선순위 높은거오면 그거 하냐 아님 하던거 다하고 우..
신장트리 최소비용 탐색 신장트리(spanning tree) 모든 정점을 포함하면서 사이클이 없는 트리 (트리의 조건) 목표 그리디(Prim, Kruskal) 알고리즘으로 mst(최소비용신장트리) 찾아보자 알고리즘의 최적의 여부를 검증해보자 그리디 알고리즘 결정 순간마다 가장 좋다고 생각되는 것을 해답으로 선택 선택은 그 당시(local)에는 최적이나 최종적인 선택(global)은 최적이라는 보장 없음, 검증 필수 Prim의 알고리즘 개념 집합에 속한 정점 중에서 가장 가까운 정점을 반복에서 추가하는 방법 처음 노드를 v1으로 선택했다고 하자 (랜덤으로 해도 상관없음) 순서 안보임 경계 결과집합 1 V4,V5 V2,V3 V1 2 V5 V3,V4 V1,V2 3 null V4,V5 V1,V2,V3 4 null V4 V1,V2,V3,..
Process Scheduling 야무지게 알아보자 burst : 실행중인 상태 cpu burst 상태면 현재 running 상태다. I/O burst 면 waiting CPU와 I/O가 돌아가면서 수행된다. 스케줄링 기준 CPU utilization : cpu 사용률 Throughput : cpu가 단위 시간당 처리하는 프로세스의 개수 Turnaround time : 프로세스가 시작해서 끝날 때까지 걸리는 시간 Waiting time : 프로세스가 ready queue에서 기다리는 시간 Response time : 대화식 시스템에서 요청 후 응답이 오기까지 시간 cpu-bound , i/o bound 프로그램에 따라 cpu와 i/o burst time 비율이 다르다. 우리가 쓰는 대부분 프로그램은 i/o bound process이다. ..