Index
1 | Data Structures |
Data Structures
Arrays
단순히 데이터 원소들의 리스트
메모리 상에서 연속으로 저장된다
배열의 종류
1 | 정적 배열 |
Reference
누구나 자료 구조와 알고리즘, 저자: 제이 웬그로우, 출판사: 길벗
FirstDuplicate
입력 리스트에서 제일 먼저 중복을 이루는 값 찾아내는 함수.
Example
1 | a: [2, 1, 3, 5, 3, 2] |
[1번] with Python
1 | def firstDuplicate(a): |
가장 먼저 중복을 이루면 해당하는 값을 출력한다.
[2번] with Python
1 | def firstDuplicate(a): |
입력값의 전체를 확인 했을 때 가장 마지막 중복값의 인덱스가 빠른 경우의 값을 출력
FirstNotRepeatingCharacter
가장 처음으로 오는 중복이 없는 문자
Example
1 | s = 'aabbcc' |
[1번] with Python
1 | def firstNotRepeatingCharacter(s): |
예외 상황없이 잘 되지만 속도가 매우 낮다.
[2번] with Python
1 | from collections import Counter |
1번 버전보다 속도가 더 빠르다.
[3번] with Python
1 | def firstNotRepeatingCharacter(s): |
rindex는 가장 오른쪽에 있는 index값을 출력 하는 메소드!
rotateImage
2차원 배열을 입력값으로 받으면 오른쪽으로 90도 회전한 2차원 배열(행렬)을 반환 하는 함수
Example
1 | a = [[1,2,3], |
[1번 with python]
1 | import numpy as np |
2차원 행렬을 오른쪽으로 90도 회전 하는 것은 행렬을 전치한 후 뒤집으면된다.
[2번 with python]
1 | rotateImage = lambda a: zip(*a[::-1]) |
2차원 행렬을 위아래로 뒤집은 후 열을 행으로 바꾸면 오른쪽으로 90도 회전한 것과 같아진다.
Linked Lists
연결 리스트는 노드들이 한 줄로 연결되어 있는 방식의 자료 구조이다.
여기서 노드란, 데이터와 다음 노드의 주소(포인터)를 담고 있는 구조체(메모리 공간)
연결리스트의 종류
1 | # 연결방향에 따라 연결리스트는 세 가지 종류로 나뉜다 |
배열 VS 연결리스트
Singly linked list with python
1 | class Node(object): |
Reference
생활코딩 https://opentutorials.org/module/1335/8821
초보몽키의 개발공부로그 https://wayhome25.github.io/cs/2017/04/17/cs-19/
Daim blog https://daimhada.tistory.com/72
BaaaaaaaarkingDog blog https://blog.encrypted.gg/932
Dalkomit blog https://dalkomit.tistory.com/7
RemoveKFromList
Linked list에서 K와 일치하는 값 제거하기
Example
1 | l = [3, 1, 2, 3, 4, 5] |
[1번 with python]
1 | # singly-linked list: |
IsListPalindrome
Linked list가 palindrome인지 아닌지 판별하기
Example
1 | l = [0, 1, 0] |
[1번 with python]
1 | class ListNode(object): |
Hash tables
해시 테이블은 키(key) 1개, 값(value) 1개 쌍으로 이루어져 있는 자료구조 이다
프로그래밍 언어에 따라 서로 다른 이름으로 불린다 (해시, 맵, 해시 맵, 딕셔너리, 연관 배열)
해시 테이블은 O(1)만에 값을 찾아낼 수 있는 빠른 읽기의 장점을 갖고 있다
Grouping dishses
음식, 식재료, 식재료,… 순으로 되어 있는 리스트를 식재료, 음식, 음식… 순으로 바꾸는 함수를 만든다
이때, 식재료는 두 가지 이상 음식에 포함되어 있는 것만 값을 반환해야 한다
추가로 사전식 순서를 따라 정렬한다 (lexicographically order)
Example
1 | dishes = [["Salad", "Tomato", "Cucumber", "Salad", "Sauce"], |
[1번 with python]
1 | def solution(dishes): |
Sorting & Searching