Computer Science/자료 구조, 알고리즘 14

스택(stack) / 큐(queue)

스택 한쪽 끝으로만 자료를 넣고 뺄 수 있는 자료 구조. Last in First out(LIFO) 구조 단순한 스택 형식 만들기는 append, list 형식으로 만들 수 있음 이 스택 형식을 잘 써먹는 함수로는 다음과 같은 함수가 있다. push(data) : 맨 앞에 데이터 넣기 pop() : 맨 앞의 데이터 뽑기 peek() : 맨 앞의 데이터 보기 empty() : 스택이 비어있는지의 여부를 반환하는 연산 top() : 스택의 가장 위에 있는 자료를 반환하는 연산 그럼 스택을 왜 쓸까? 스택과 위 함수와의 연관은 뭘까? 알고리즘 경험이 많진 않지만, 리스트 등의 데이터 형태에 들어온 것을 위 함수를 통해 꺼내어서 점검하는 형식으로 많이 이용한다. 콜스택 그리고 컴퓨터 프로그램에서 현재 실행중인 ..

배열과 리스트

배열 배열 : 크기가 정해진 데이터의 공간, 한 번 정해지면 바꿀 수 없다. 배열은 원소에 즉시 접근할 수 있다. 그 배열의 'Index'를 통해 접근한다. * 즉시 접근 가능 : O(1) = 상수 시간 내에 접근이 가능 그러나 배열은 수정, 삭제 시 모든 원소를 다 옮겨야 한다. 최악의 경우에는 모든 원소를 다 옮기면서 시간복잡도가 O(N)까지 증가할 수 있다. 크기가 정해진 데이터의 공간이기 때문에 원소를 추가할 시, 새로운 배열을 만들어야 하므로 수정에 있어 비효율적 리스트 리스트 = Linked List : 크기가 정해지지 않은 데이터의 공간, 연결고리만 주어진다면 바꿀 수 있다. 리스트는 특정 원소에 접근하려면 연결고리를 따라 접근해야 한다. 최악의 경우에는 모든 원소에 다 접근해야 하기 때문에..

컴퓨터 구조와 운영체제 핵심 개념

컴퓨터 구조를 이해해야 하는 이유 1. 문제 해결 능력 기본적으로 컴퓨터의 작동 원리에 대해 이해하는 사람은 그렇지 않은 사람보다 훨씬 문제해결이 편하다. 컴퓨터를 관조할 수 있는 능력 배양(분석 능력) 2. 성능, 용량, 비용 컴퓨터 구조는 결국 이 세 가지를 고려해서 보기 때문에 당연히 고려해야 하는 부분 컴퓨터가 이해하고 있는 정보 1. 데이터 숫자, 문자 등의 정적인 정보 컴퓨터와 주고받는 / 내부에 저장된 정보 2. 명령어 컴퓨터를 실질적으로 움직이게 하는 정보 데이터는 명령어를 위한 재료 명령 코드를 사람이 쓰면, 컴퓨터는 그것을 자신만의 명령 데이터로 변환해서 사용 ex) binary 컴퓨터의 핵심 부품 4개 1. CPU CPU란? : 메모리에 저장된 값을 읽어들이고, 실행하고, 해석하는 장..

시간복잡도/공간복잡도/점근표기법

작년 학교 강의를 통해서 알고리즘을 조금 찍먹만 해보았지만, 이 3가지 개념은 정말 수업 내내 나타났기 때문에 이번에는 제대로 공부하고 정리해보았다. 시간 복잡도 개념 시간 복잡도란? : 알고리즘이 문제를 풀기 위한 시간(혹은 연산)을 말한다. 단어로 말하자면 "수행시간" 우리가 프로그래머스에서 문제를 풀 때 문제를 해결하는 시간이 아래에 뜨는데, 이것이 시간복잡도를 간접적으로 나타내어 준다. 테스트 1의 0.03ms가 내 코드의 시간복잡도이다. 참고로 옆의 10.2MB는 공간복잡도! 시간 복잡도 풀이법 그렇다면 이 시간복잡도는 어떤 방식으로 구하는 걸까? 아래의 예시를 보면 금방 이해될 것이다. for num in array: # array 의 길이(N)만큼 아래 연산이 실행 for compare_nu..