학과공부 9

우선순위 큐와 힙

우선순위 큐 데이터 요소들이 우선순위를 기준으로 정렬되어 처리되는 큐 FIFO(First In, First Out) 방식인 일반 큐와 달리 가장 높은 우선순위를 가진 요소가 먼저 처리된다. 특징각 요소는 값과 우선순위를 가진다. 삽입은 어느 위치든 가능하지만, 삭제는 항상 우선순위가 가장 높은 요소부터 이루어진다. 사용 예시 작업 스케줄링: CPU 스케줄링에서 높은 우선순위의 작업을 먼저 실행한다. 네트워크 라우팅: 트래픽 처리에서 긴급한 패킷을 우선 처리한다.힙 완전 이진 트리 형태의 자료구조로, 우선순위 큐를 효율적으로 구현하기 위해 사용한다. 힙은 두 가지 유형으로 나누어진다. 최대 힙: 부모 노드의 값이 항상 자식 노드의 값보다 크거나 같음 최소 힙: 부모 노드의 값이 항상 자식 노드의 값보다 작..

정렬 알고리즘

정렬이란? 데이터를 기준에 맞춰 나열하는 것 정렬의 종류 버블 정렬 인접한 두 요소를 비교하여 필요하면 위치를 바꾸는 방식 큰 요소를 점차 끝으로 보내며 정렬한다. 시간 복잡도는 O(N^2)로, 효율성이 낮아 소규모 데이터 정렬에 적합하다. 선택정렬(selection sort) 전체 배열에서 가장 작은 값을 찾아 맨 앞의 요소와 교환하는 방식 시간 복잡도는 O(n^2)로, 데이터가 많을수록 비효율적이다. 삽입 정렬(Insertion sort) 배열의 첫 번째 요소를 기준으로 다음 요소를 적절한 위치에 삽입해가며 정렬하는 방식 시간 복잡도는 O(n^2)이지만, 거의 정렬된 데이터에서는 빠르게 동작하여 효율적이다. 퀵 정렬(Quick Sort) 피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할하여 ..

Clock Cycle에 따른 PC 값 변화

CPU에서 Program Counter(PC)는 다음에 실행될 명령어의 메모리 주소를 가리킨다. 클록 사이클에 따라 PC의 값은 명령어를 실행하면서 순차적으로 변화하게 된다. PC 값의 변화는 명령어 가져오기(Fetch), 명령어 디코드 및 실행(Decode and Execute), 조건 분기 처리 단계로 진행된다. 1. 초기 상태: 프로그램이 시작되면 PC는 프로그램의 첫 번째 명령어 주소로 설정된다. 2. 명령어 가져오기(Fetch): 클록 사이클이 시작되면, CPU는 PC가 가리키는 주소의 명령어를 가져온다.이후 PC는 자동으로 증가하여 다음 명령어의 주소를 가리키게 된다. 각 명령어가 1바이트 또는 4바이트일 경우, PC는 다음 명령어를 가리키기 위해 1 또는 4씩 증가한다. 3. 명령어 실행:C..

DP, Memoization 비교

DP(Dynamic Programming) 주어진 문제를 하위 문제로 나누고, 작은 문제들부터 시작하여 점점 큰 문제를 해결하는 상향식(Bottom-Up) 방식 배열이나 테이블에 작은 하위 문제의 결과를 저장하고, 각 단계에서 이를 참조하여 더 큰 문제를 해결한다. 작은 문제들을 차례로 해결하여 마지막에 전체 문제의 해답을 얻는 방식 장점모든 하위 문제를 한 번씩만 계산하고 결과를 저장하므로 재귀 호출의 깊이에 제한이 없어 메모리 오버헤드가 적고, 대부분의 경우 실행 속도 역시 바르다. 한계해결해야 할 모든 하위 문제를 미리 테이블에 저장하므로 불필요한 계산과 메모리 낭비가 발생할 수 있다. 메모이제이션(Memoization) 필요할 때만 하위 문제를 해결하고 이를 캐시에 저장하는 방식 재귀적으로 문제를..

[백준] 1874번 - 스택 수열 (By Python)

풀이과정 힌트를 참고하면 문제를 쉽게 이해할 수 있다. N이 8이라고 가정할 때, 입력된 수열 [4,3,6,8,7,5,2,1]을 구하는 과정은 다음과 같다. 먼저 1부터 8까지의 숫자를 넣기 위한 리스트와, push,pop 연산을 각각 '+'와 '-'로 나타내기 위한 스택 리스트를 생성한다. 1부터 4까지 먼저 리스트에 push한 후, 4,3을 pop한다. 그러면 리스트 내부에는 [1,2]만 남게 된다. 이후 6까지 push 한 후 다시 pop을 해주는데 여기서 문제가 발생한다. 다시 1부터 6까지 리스트에 push하게 되면 리스트 내부에는 [1,2,3,4,5,6]이 남게 되고,pop을 수행하면 [1,2,3,4,5]가 남게 된다.8까지 push한 후 pop연산을 수행하면 위의 순서대로 연산이 나오지 않을..

[백준] 9012번 - 괄호 (By Python)

풀이 과정 모든 괄호 문자열이 입력되었을 때, '(' 문자열과 ')' 문자열의 개수가 일치하면 됩니다. 따라서, 빈 리스트를 만들어 '(' 문자열이 입력되었을 경우 리스트에 괄호를 삽입하고, ')' 문자열이 입력되었을 경우 리스트에 미리 삽입된 '(' 괄호를 제거함으로써 균형을 맞춥니다. 만약 리스트가 비어있는 상태에서 ')' 괄호열이 입력될 경우 NO 문자열을 출력하며 반복문을 종료하며, 모든 입력이 완료되었을 때 리스트에 원소가 없으면 YES 문자열을 출력합니다. 풀이 def solution(): stack=[] words = input() for word in words: if word=='(': stack.append(word) elif word==')': if stack: stack.pop() ..

[백준] 10828번 - 스택 (By Python)

풀이 import sys N=int(sys.stdin.readline()) list=[] # 빈 리스트를 생성한다. for i in range(N): # N의 숫자만큼 word=sys.stdin.readline().split() # 문장을 읽어온다. if word[0]=='push': list.append(word[1]) elif word[0]== 'pop': if len(list)==0: print(-1) else: print(list.pop()) elif word[0]=='size': print(len(list)) elif word[0]=='empty': if len(list)==0: print(1) else: print(0) elif word[0]=='top': if len(list)==0: pri..