CS/자료구조 + 알고리즘
-
파이썬 파이썬은 1991년 Guido van Rossum이 개발한 인터프리터 언어다. 프로그래밍 교육을 위해 많이 사용되고 기업의 실무에서도 많이 사용하는 언어다. 대표적으로 구글의 소프트웨어 절반 이상이 파이썬으로 작성되었다고 한다. 왜 파이썬을 많이 사용할까? 🔺 오픈소스 = 무료! 🔺 문법이 간단해 쉽게 배울 수 있다. Easy-to-learn Easy-to-read Easy-tomaintain 🔺 풍부한 라이브러리로 개발 생상성이 높다. 파이썬은 numpy, pandas, matplotlib 등 데이터 적재, 시각화, 통계 등에 필요한 라이브러리를 가지고 있다. 또한 범용 프로그래밍 언어로서 그래픽 사용자 인터페이스(GUI)나 Django, Flask 등을 이용한 웹서비스를 만들 수 있다. 🔺 다..
파이썬 정리파이썬 파이썬은 1991년 Guido van Rossum이 개발한 인터프리터 언어다. 프로그래밍 교육을 위해 많이 사용되고 기업의 실무에서도 많이 사용하는 언어다. 대표적으로 구글의 소프트웨어 절반 이상이 파이썬으로 작성되었다고 한다. 왜 파이썬을 많이 사용할까? 🔺 오픈소스 = 무료! 🔺 문법이 간단해 쉽게 배울 수 있다. Easy-to-learn Easy-to-read Easy-tomaintain 🔺 풍부한 라이브러리로 개발 생상성이 높다. 파이썬은 numpy, pandas, matplotlib 등 데이터 적재, 시각화, 통계 등에 필요한 라이브러리를 가지고 있다. 또한 범용 프로그래밍 언어로서 그래픽 사용자 인터페이스(GUI)나 Django, Flask 등을 이용한 웹서비스를 만들 수 있다. 🔺 다..
2023.06.06 -
1) 정렬 더보기 정렬에는 다양한 방법이 있는데, 알고 있는 방법에는 무엇이 있나요? 키 값을 비교해 자료를 삽입해 정렬하는 선택 정렬, 버블 정렬, 퀵 정렬, 병합 정렬 등의 방법이 있고, 계수 정렬과 같이 값을 비교하지 않고 정렬하는 방법도 있습니다. 왜 정렬 알고리즘이 많을까? 정렬 알고리즘 하나가 무조건 우수한게 아니라 주어진 상황에 따라 trade-off가 있기 때문입니다. 구체적인 Trade-off 예시 퀵소트는 평균의 경우 O(N logN)을 갖지만 정렬된 경우 O(N^2)의 시간 복잡도를 갖게 됩니다. 삽입 정렬은 평균 O(N^2)을 갖지만 정렬된 경우 O(N)의 시간 복잡도를 갖게 됩니다. 이미 정렬된 데이터에 대해 가장 좋은 성능을 보이는 정렬 알고리즘은? 삽입 정렬로, 자기 앞에 있는..
알고리즘 면접 대비 질문 리스트업1) 정렬 더보기 정렬에는 다양한 방법이 있는데, 알고 있는 방법에는 무엇이 있나요? 키 값을 비교해 자료를 삽입해 정렬하는 선택 정렬, 버블 정렬, 퀵 정렬, 병합 정렬 등의 방법이 있고, 계수 정렬과 같이 값을 비교하지 않고 정렬하는 방법도 있습니다. 왜 정렬 알고리즘이 많을까? 정렬 알고리즘 하나가 무조건 우수한게 아니라 주어진 상황에 따라 trade-off가 있기 때문입니다. 구체적인 Trade-off 예시 퀵소트는 평균의 경우 O(N logN)을 갖지만 정렬된 경우 O(N^2)의 시간 복잡도를 갖게 됩니다. 삽입 정렬은 평균 O(N^2)을 갖지만 정렬된 경우 O(N)의 시간 복잡도를 갖게 됩니다. 이미 정렬된 데이터에 대해 가장 좋은 성능을 보이는 정렬 알고리즘은? 삽입 정렬로, 자기 앞에 있는..
2023.06.03 -
1. 가장 중요한 건, 어떤 경우(목적)일 때 어떤 자료구조를 사용하면 좋은지를 알고 있는 것 2. 본인의 주 언어 자료구조 내부구현이 무엇으로 되어있는지 알고 가기 자료 구조를 왜 사용할까요? 메모리를 효율적으로 사용하면서 데이터를 빠르고 안정적으로 처리하기 위해 필요합니다. 특정 상황에서 유용하게 사용할 수 있는 자료구조를 선택하는 것이 중요합니다. 자료를 정리할 때 가장 중요한 것은 무엇일까요? 데이터와 목적에 따라 다르다고 생각합니다. 처리 시간, 크기, 활용 빈도, 갱신의 정도와 보안 등 고려해야할 점들 중 상황에 따라 우선순위를 정해야한다고 생각합니다. 1) 배열 vs 링크드 리스트 구현상 어떤 특징이 있는지, 시간복잡도가 어떤지, 어떤 경우에 사용하면 좋은지 위 3개 포인트만 제대로 전달하기..
자료구조 면접 대비 질문 리스트업1. 가장 중요한 건, 어떤 경우(목적)일 때 어떤 자료구조를 사용하면 좋은지를 알고 있는 것 2. 본인의 주 언어 자료구조 내부구현이 무엇으로 되어있는지 알고 가기 자료 구조를 왜 사용할까요? 메모리를 효율적으로 사용하면서 데이터를 빠르고 안정적으로 처리하기 위해 필요합니다. 특정 상황에서 유용하게 사용할 수 있는 자료구조를 선택하는 것이 중요합니다. 자료를 정리할 때 가장 중요한 것은 무엇일까요? 데이터와 목적에 따라 다르다고 생각합니다. 처리 시간, 크기, 활용 빈도, 갱신의 정도와 보안 등 고려해야할 점들 중 상황에 따라 우선순위를 정해야한다고 생각합니다. 1) 배열 vs 링크드 리스트 구현상 어떤 특징이 있는지, 시간복잡도가 어떤지, 어떤 경우에 사용하면 좋은지 위 3개 포인트만 제대로 전달하기..
2023.06.03 -
이진탐색 이진탐색이란, 매 탐색마다 탐색 범위를 반으로 좁혀가며 빠르게 탐색하는 알고리즘이다. 이진탐색을 수행하기 위해서는 리스트(배열)가 정렬되어 있어야 한다. ✅ Pseudo Code 크기가 N인 list에서 target이라는 특정 데이터를 찾아내고 싶다고 가정하자. (left와 right는 list의 인덱스를 의미한다.) left = 0, right = n - 1로 초기화한다. mid = (left + right) // 2로 설정한다. 만약, list[mid] == target이라면 탐색을 종료한다. 만약, list[mid] != target이라면, list[mid] > target : right = mid - 1로 갱신하고 2번으로 돌아간다. list[mid] < target : left = mi..
기타 알고리즘 (이진탐색/ 최대공약수와 최소공배수/ 소수 찾기/ 재귀와 반복/ DP와 분할정복/ 그리디/ 백트래킹/ 허프만 코딩)이진탐색 이진탐색이란, 매 탐색마다 탐색 범위를 반으로 좁혀가며 빠르게 탐색하는 알고리즘이다. 이진탐색을 수행하기 위해서는 리스트(배열)가 정렬되어 있어야 한다. ✅ Pseudo Code 크기가 N인 list에서 target이라는 특정 데이터를 찾아내고 싶다고 가정하자. (left와 right는 list의 인덱스를 의미한다.) left = 0, right = n - 1로 초기화한다. mid = (left + right) // 2로 설정한다. 만약, list[mid] == target이라면 탐색을 종료한다. 만약, list[mid] != target이라면, list[mid] > target : right = mid - 1로 갱신하고 2번으로 돌아간다. list[mid] < target : left = mi..
2023.06.02 -
정렬 알고리즘 데이터를 특정한 기준에 따라서 순서대로 나열하는 알고리즘 정렬 알고리즘은 이진 탐색의 전처리 과정이기도 하다. 대부분의 프로그래밍 언어에서 지원하는 표준 정렬 라이브러리는 최악의 경우에도 O(NlogN) 을 보장하도록 설계되어 있다. 정렬 알고리즘별 시간복잡도 삽입 / 셀 : 키 값을 비교해서 자료를 삽입 선택 / 힙 : 특정 자료구조를 통해 정렬 교환 / 퀵 : 키 값을 비교해서 교환 병합 : 키 값을 비교하고 자료를 병합 계수 / 기수 : 값을 비교하지 않고 정렬 👆 Stable Sort : 정렬 결과 중복된 값들의 순서가 변하지 않는 정렬 방식 1) 삽입 정렬 Insertion Sort 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아..
정렬 알고리즘정렬 알고리즘 데이터를 특정한 기준에 따라서 순서대로 나열하는 알고리즘 정렬 알고리즘은 이진 탐색의 전처리 과정이기도 하다. 대부분의 프로그래밍 언어에서 지원하는 표준 정렬 라이브러리는 최악의 경우에도 O(NlogN) 을 보장하도록 설계되어 있다. 정렬 알고리즘별 시간복잡도 삽입 / 셀 : 키 값을 비교해서 자료를 삽입 선택 / 힙 : 특정 자료구조를 통해 정렬 교환 / 퀵 : 키 값을 비교해서 교환 병합 : 키 값을 비교하고 자료를 병합 계수 / 기수 : 값을 비교하지 않고 정렬 👆 Stable Sort : 정렬 결과 중복된 값들의 순서가 변하지 않는 정렬 방식 1) 삽입 정렬 Insertion Sort 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아..
2023.06.02 -
TL;DR 자료구조 빈출 유형 !!! 해시 테이블은 키에 대한 해시 값을 사용해 값을 저장하고 조회하며, 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 Associate Array. 해시 테이블은 적은 리소스로 많은 데이터를 효율적으로 관리할 수 있기 때문에 사용한다. 해시 함수에는 Division, Multiplication, Folding, Universal Hashing 등 다양한 방법이 있다. 충돌(Collision)을 처리하기 위해 링크드 리스트나 트리를 활용하는 Chaining 기법과 빈 공간에 저장하는 Open Addressing 방법을 사용한다. 해시 테이블 해시(hash) : 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값 해시 함수 : 임의의 길이의 데이터를 고정..
해시 테이블TL;DR 자료구조 빈출 유형 !!! 해시 테이블은 키에 대한 해시 값을 사용해 값을 저장하고 조회하며, 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 Associate Array. 해시 테이블은 적은 리소스로 많은 데이터를 효율적으로 관리할 수 있기 때문에 사용한다. 해시 함수에는 Division, Multiplication, Folding, Universal Hashing 등 다양한 방법이 있다. 충돌(Collision)을 처리하기 위해 링크드 리스트나 트리를 활용하는 Chaining 기법과 빈 공간에 저장하는 Open Addressing 방법을 사용한다. 해시 테이블 해시(hash) : 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값 해시 함수 : 임의의 길이의 데이터를 고정..
2023.06.01