컴퓨터 사이언스 (CS)/자료구조 및 알고리즘 10

알고리즘 요점 정리 - 스택 큐 힙

입사 후 정신이 없어서 면접 준비를 할 때 작성한 요점 개념에 대한 글을 포스팅한다는게 깜박했다. 임시저장 게시물 부랴부랴 업로드해야겠다 !!! 목차 스택 큐 힙 스택 LIFO 데이터 간 순서를 약속하는 것이다. 마치 접시처럼, 먼저 쌓인 것이 가장 늦게 출력된다. deque (맨 앞과 뒤에 데이터를 삽입 및 삭제할 수 있도록 하는 자료형) 양방향 자료형을 쓰는데, 이는 append나 pop이 압도적으로 빠르다. 추가는 append 접근은 [-1] 삭제는 pop() 큐 FIFO 병원 대기줄과 같이, 먼저 쌓인 것이 먼저 출력된다. 즉 들어가는 순서대로 나온다. 이 또한 deque를 사용한다. 뒤에서는 append와 pop을, 앞에서 넣을땐 appendleft 앞에서 꺼낼땐 popleft를 사용한다. 큐는..

09. 스택/큐 알고리즘 개념

01. 스택(Stack), 큐(Queue) 개념 1-1.스택(stack)이란 자료의 입력과 출력을 한 방향으로 제한한 자료구조를 의미한다. 즉, LIFO(Last In First Out)구조다. 스택의 예시 쌓여있는 접시에서는 맨 위에것부터 쓸 것이다. 새걸넣어도 맨위이다. 접시가 쌓인 모습을 상상하자! 1-2-1. 스택 풀이 방법 스택 자료형은 없다. deque를 이용해 스택을 쓴다는 점을 알고 있으면 좋다. 🔥 덱(deque)이란? 양방향 큐이다. 즉, 맨 앞과 뒤에 데이터를 삽입하고 삭제할 수 있게 해주는 자료형이다. 양 끝 엘리먼트에 대한 append, pop이 빠르다는 장점이 있어 많이들 사용한다. 삽입 제거 시, 일반적인 리스트는 연산에 O(n)인 데에 반해, 데크는 O(1)로 성능이 매우 빠..

08. 정렬 알고리즘 개념 및 풀이

01. 정렬 알고리즘이란? 정렬(sorting)이란, 순서없이 나열된 자료를 특정한 키값에 따라 오름차순이나 내림차순으로 자료를 재배열한 것을 의미한다. 정렬 알고리즘이 왜 필요할까? 탐색 효율을 높이기 위해서다. 도서관에서도, 원하는 책을 효율적으로 탐색하기 위해서 책이 순서대로 정렬되어있어야 한다. 도서관을 떠올리면 정렬의 필요성을 이해하기 쉽다. 02. 정렬 알고리즘의 종류 2-1. 선택정렬 가장 작은 노드(최소값)를 선택하고 왼쪽부터 정렬을 하기 위해 알맞은 위치와 교환하는 작업을 반복하는 것을 뜻한다. O(n^2)번의 시간복잡도가 필요하며, 작은 수를 하나하나 순차적으로 찾아서 정렬해야 하므로 안정적이지 않다. 2-2. 삽입정렬 삽입정렬은 아직 정렬되지 않은 특정 노드와 정렬된 노드들의 값을 비..

07. 파이썬을 활용한 문제해결

오늘은 파이썬을 활용한 문제 해결 방법을 간단히 살펴보고자 한다. 앞서 내가 주로 사용하는 파이썬 언어는 어떤 언어인지 살펴볼 것이다. 목차 정규표현식(=정규식) 얕은 복사와 깊은 복사 파이썬 01. 정규표현식(=정규식) 정규표현식이란, 특정한 규칙을 가진 문자열의 집합을 사용하는 데에 표현하는 언어다. 주로 복잡한 문자열을 처리할 때 사용한다. 정규표현식의 예시는 무엇이 있을까? 예를 들어, 주민등록번호 뒷자리 7자리를 별표(*) 처리하고 싶다고 할 때, 정규표현식을 사용한다면 보다 간편하고 직관적인 코드를 짤 수 있다. 정규표현식의 더 많은 예시로는, 아래 링크를 걸어두도록 하겠다. https://wikidocs.net/1642 파이썬에서는 이런 정규표현식을 re 모듈로 지원하는데, 딥러닝(텍스트마이..

06. 프로그래밍과 문제해결_내장 메소드

파이썬이랑 알고리즘, 자료구조는 생산을 위한 도구라고 보면 된다. 자료구조와 알고리즘 챕터에서는, 무엇보다 복잡한 문제를 작은 문제로 분할하면서 해결한다라는 아이디어를 갖고 있어야 한다. 문제를 보았을 때, 문제가 어떤 패턴을 갖고 있는지 생각해본 뒤, 작은 문제로 분할해 문제를 풀어보는 과정을 반복해 수행한다고 보면 된다. 자료구조란, 우리가 데이터를 사용함에 있어서, 어떻게 데이터를 저장하고 사용할 지 정의하는 과정이다. 이는 데이터의 효율적인 접근을 목적으로 한다. 데이터를 쉽게 찾기 위해서는 특정 구조로 데이터를 저장해주어야 한다. 알고리즘이란, 문제를 해결하기 위한 단계적 절차를 정의한 것이다. 따라서, 우리는 문제해결능력과 컴퓨팅 사고능력(수학 개념을 컴퓨터로 잘 옮겨내는 능력)을 키워 자료구..

05. map 에러 해결 방법

목차 Map Map 에러발생 01. Map Map은 파이썬의 내장함수로, 리스트의 요소를 지정된 함수로 처리해주는 함수다. 이는 매우 자주 사용되며, 예시는 아래와 같다. 그런데, 사실 내가 map을 설명하는 이유는 아래 에러설명을 위해서다. (내가 자주 까먹기 때문에...!)예시(아래)와 같이 코드를 작성하면 TypeError가 발생한다. 02. Map 에러발생 ⚠️ TypeError: map() must have at least two arguments. 2-1. 에러발생코드 def solution(num): num_square = list(map(lambda x: x*x, num) ) print(num_square) answer=[] for i in num_square: if i % 2 == 0: ..

04. 인스턴스 변수와 메소드

목차 인스턴스 변수 인스턴스 메소드 여러 인스턴스가 공유하는 속성 01. 인스턴스변수 인스턴스의 개별적 속성은 인스턴스 변수라고 한다. 형식은 아래와 같다. 인스턴스이름.속성이름(인스턴스 변수) = 속성에 넣을 값 class User: pass user = User() user.name = '한소희' user.email = 'eng.sohee@gmail.com' # 인스턴스 변수 사용방법 print(user.name) 02. 인스턴스 메소드 객체는 속성과 행동이다. 속성은 변수로 나타내고 행동은 함수로 나타낸다. 이 함수를 메소드라고 한다. 메소드의 다양한 종류 중, 첫 번째로 인스턴스 메소드에 대해 설명해보겠다. 인스턴스 메소드란, 인스턴스 변수를 사용하거나, 인스턴스 변수에 값을 설정하는 메소드를 말..

03. 객체지향 프로그래밍 개론

오늘은 객체지향 프로그래밍의 초초초 기초를 간단히 설명해볼 예정이다. 무엇이든 기본을 탄탄히 다지는 것이 중요한 법! 객체와 객체지향 프로그래밍의 개념에 대해 살펴보고, 객체와 class의 관계를 살펴보도록 하자. (보다 더 흥미로운 개념은 다음 포스팅에서..!) 목차 객체란? 객체지향 프로그래밍이란? 객체 틀, 클래스 01. 객체란? 속성과 행동으로 이루어진 존재, 즉 우리가 살면서 보는 모든 존재를 말한다. 예를 들어, 인스타그램 유저는 속성으로 "이메일 주소 비밀번호 친구목록" 등이 있다. 그리고 "좋아요 친구추가" 등의 행동을 할 수 있다. 따라서 속성과 행동이 존재하므로 객체라고 할 수 있다. 자동차처럼 현실에 존재하든, 가상에 존재하든 속성과 행동을 떠올릴 수 있다면 객체라고 할 수 있다. 0..

02. 좋은 코드란 무엇인가

안녕하세요 한소희입니다. 공부를 통해 배운 내용을 작성하고 있습니다. 혹여 해당 포스팅에서 잘못된 부분이 있을 경우, 알려주시면 빠르게 수정 조치하도록 하겠습니다. 감사합니다. 목차 좋은 코드란 무엇인가? 좋은 코드의 기준 - Naming 좋은 코드의 기준 - Style 좋은 코드의 기준 - 구조화 01. 좋은 코드란 무엇인가? 개발자에게 가장 중요한 능력 중 하나는 간결하고 확실한 의사소통이라고 생각한다. 이때, 개발자는 코드를 이용해 소통을 하기 때문에, 무엇보다 좋은 코드를 짤 줄 알아야 한다는 것이 나의 의견이다. 그렇다면, 좋은 코드란 무엇일까. 사람마다 '좋은 코드'의 정의는 조금씩 다를 수 있다. 따라서 필자는 '다수의 개발자가 생각하는 좋은 코드의 정의'에 대해 소개해보고자 한다. 함께 좋..

01. 프로그래밍 언어 이해하기

무엇이든, 기본이 제일 중요하다. 기본 개념을 제대로 숙지하고 있어야, 새로운 개념을 소화하는 데에 어려움이 없다고 믿는다. 따라서 CS기초지식부터 심화개념까지, 다시 한 번 되짚어보고자 한다. 오늘은 기본적인 프로그래밍 언어를 이해해보고, 분류 기준은 어떻게 정의할 수 있을지 탐색해 볼 것이다. 목차 프로그램과 프로그래밍 언어 프로그래밍 언어의 분류 기준 프로그래밍 언어의 흐름 01. 프로그램과 프로그래밍 언어 음식점을 갔을 때를 떠올려보자. 우리가 키오스크를 통해 주문을 했을 때, 주문서는 주방장에게로 향한다. 주방장은 그 주문서를 읽고 '내가 명령한 주문서'대로 조리를 행한다. 여기에서, 컴퓨터는 주방장을 / 프로그램은 키오스크 주문서를 / 프로그래밍언어는 주문서에 적힌 언어종류를 뜻한다. 즉, 프..