전체 글(198)
-
Linked list (2)- 구현하기
# Node는 Linked List에서 각 데이터와 다음 Node를 가리키는 데이터가 들어있는 객체이다 # Node가 연결되어서 하나의 Linked List가 되는거다. class Node: # 생성자 def __init__(self, value=0, next=None): self.value = value self.next = next # 노드 생성시 그 노드의 값(value)과 다음 노드(next)의 값을 넣어준다. # 세개의 노드를 만들었고 각각 value를 가지고 있다. first = Node(1) second = Node(2) third = Node(3) # 각 노드에 다음 Node를 가리키도록 데이터를 넣어준다. first.next = second second.next = third # 위에 만..
2023.02.20 -
Linked List
Linked List -Node라는 구조체가 연결되는 형식으로 데이터를 저장하는 자료구조 -각 Node에는 데이터와 다음 노드의 주소값이 들어가있다. -메모리에는 각 Node가 비연속적으로 저장되어 있지만 각 노드에는 다음 노드의 메모리 주소를 알기에 논리적으로는 연속성을 갖고있다.(물리적으로 비연속, 논리적으로 연) -메모리가 연속적으로 있지 않으니 메모리 사용에는 자유로우나 각 노드당 데이터뿐만 아니라 다음 노드의 메모리 주소를 저장해야 하니 데이터 하나당 차지하는 메모리가 더 커진다. VSCode에서 Linked List를 구현해보자 #Node는 Linked List에서 각 데이터와 다음 Node를 가리키는 데이터가 들어있는 객체이다 #Node가 연결되어서 하나의 Linked List가 되는거다. ..
2023.02.19 -
Sort & Two Pointer
파이썬에는 기본적으로 오름차순으로 sort를 해주는 메소드가 있다. sort의 시간복잡도는 O(nlogn)이다. Tow Pointer 보통 sort와 tow pointer는 같이 사용된다. 예를 들어서 설명하겠다. [9, 3, 2, 6] 위와 같은 list가 있다. 위의 list를 오름차순으로 정열하면 [2, 3, 6, 9] ^ ^ Tow pointer를 한글로 하면 두지점이다. 두 지점을 왼쪽 끝과 오른쪽 끝에 두 지점이 있다고 생각하자. list 내에 있는 숫자를 더해서 우리가 원하는 값이 있는지 확인을 할거다. 더해서 10이 있는지 확인을 하면 왼쪽과 오른쪽 두지점을 일단 더한다. 11이 나오고 우리가 원하는 값 10보다 더한값이 크다. 그럼 왼쪽에 오른쪽에 있는 포인트를 한칸 왼쪽으로 이동한다 [..
2023.02.19 -
리스트(List)
List [1,2,3] [2,1,3] [3,1,2] 위에 있는 리스트는 전부 다른 리스트이다. 같은 숫자로 이루어져있지만 순서가 다르기 때문이다. 하지만 위에 있는 예시가 Set이라면 전부 같은거다 왜냐하면 순서가 상관없기 때문이다. List 구현방법 -Array list (Array, Dynamic array >>> Array List는 Dynamic array로 되어있고 Dynamic array는 Array로 되어있음) ex) 파이썬에서 list -Linked list(Node) 배열의 특징 -고정된 저장 공간 -순차적으로 데이터 저장 -배열을 선언하면 size가 정해지고(static array) size만큼 연속된 메모리를 할당 받아 data를 순서대로 저장하는 자료구조 시간복잡도도 int arr[..
2023.02.19 -
시간복잡도
43, 12, 43, 22, 11 위의 다섯개의 숫자가 있다. 이 숫자를 오름차순으로 정열하는 코딩을 할거다. 작성한 코딩을 실행하면 결과가 나올때까지 걸리는 시간이 runnint time이다. cpu는 코딩을 한줄한줄 처리해 나가는데 각 소스마다 걸리는 시간이 있다. 예를들어 반복문이 한번 실행하는데 1n 걸린다고 하면 반복문을 열번 돌리면 10n이 걸린다. 이 반복분을 이중 반복문으로 10번하면 100n^2이 걸린다. 이중 반복문 말고 다른 소스의 걸리는 시간이 3n + 4 걸린다고 하면 전체 걸리는 시간은 100n^2 + 3n + 4가 된다. 시간복잡도는 빅오로 나타내는데 최고차수만 나타낸다. 빅오로 나타내면 O(n^2)가 된다. 3 >>> O(1) 3n^2 + 2n + 4 >>> O(n^2) 2n..
2023.02.18 -
메모리 구조
메모리에는 크게 하드디스크와 ram메로리가 있다. 코딩을하고 저장하면 하드디스크에 올라가고 실행하면 ram메모리에 올라간다. 비효율적으로 코딩하면 ram 메모리 공간이 낭비되고 성능을 저하시킨다. Ram메모리는 트랜지스터라는 작은 반도체 소자로 이루어져 있다. 트랜지스터에 불이 들어오면 1 안들어오면 0 으로 트랜지스 하나당 2가지의 숫자를 나타낼 수 있다. 이것을 1bit라고 한다. 2bit는 트랜지스터가 두개니 4개의 숫자, 8bit는 255의 숫자를 나타낼 수 있다. 8bit가 1byte이다. 이와같이 컴퓨터는 이진법의 숫자를 통해 인식한다. 217을 이진법으로 나타내면 11011001 이다 217을 16진법으로 타나내면 위의 이진법을 4개씩 나누어서(1101, 1001) 나타낼 수 있다. 1101..
2023.02.18