본문 바로가기

CS/자료구조6

Queue Queue한쪽 끝(rear)에서 데이터의 삽입(enqueue)이 일어나고, 반대쪽 끝(front)에서 삭제(dequeue)가 일어나는 선형 자료구조그런 구조이기 때문에 FIFO의 형태로 동작 시간 복잡도rear나 front 외, 원소들의 확인 및 변경은 원칙적으로 불가능연산의 시간 복잡도Rear나 front에 원소 추가(enqueue), 제거(dequeue)O(1)Rear나 front의 원소 확인O(1) 구현배열이나 연결리스트 등으로 구현 가능구현struct Queue { private var array: [T?] = [] private var frontIndex = 0 var front: T? { guard frontIndex T? { guard fr.. 2024. 7. 24.
Stack 유형 - 문자열 문자열 문제스택을 사용하는 문자열 문제는 자주 나옵니다. 일반적인 문자열 문제는 문자열을 순회하면서, 문자를 스택에 넣고, 각 반복에서 현재 문자와 스택의 맨 위 문자를 비교하는 것이 있습니다. 스택은 가장 마지막 문자를 가지고 있기 때문에 문자열 매칭에 유용합니다.  예제 1주어진 문자열 s는 (, ), {, }, [, ] 만 포함합니다.입력 문자열이 유효한지 판단하세요.문자열이 유효하려면 모든 여는 괄호가 동일한 유형의 닫는 괄호에 의해 올바른 순서로 닫혀야 하며, 각 닫는 괄호는 정확히 하나의 여는 괄호를 닫아야 합니다.예를 들어, s = ( { } ) 는 유효하지만, s = ( ] 는 유효하지 않습니다. 방법올바른 순서는 이전의 여는 괄호가 무엇이었는지에 의해 결정됩니다. 닫는 괄호가 나타날 때마.. 2024. 7. 23.
Stack Stack한 쪽 끝에서만 데이터의 추가(push)와 삭제(pop)가 일어나는 선형 자료구조이러한 구조로 인해 Last In First Out의 형태로 동작 시간복잡도최상단 원소를 제외한 나머지 원소들의 접근 및 변경은 원칙적으로 불가능추가 (Push)O(1)제거 (Pop)O(1)최상단 원소 확인 (Top)O(1) 구현배열이나 연결리스트 등으로 구현이 가능ex) 배열을 이용한 구현struct Stack { private var array: [T] = [] var size: Int { array.count } var isEmpty: Boot { array.isEmpty } var top: T? { array.last } mutating func push(_ newEl.. 2024. 7. 23.
Linked List 유형 - 반전 처리 반전 처리연결 리스트를 반전하는 것은 흔한 인터뷰 문제이지만, 다양한 문제를 해결하는 데 사용할 수 있는 기술이기도 합니다. 이유는 포인터를 이동시키는 방법에 대한 깊은 이해를 요구하기 때문입니다. 오늘은 이것에 대해 제대로 학습해봅시다. 가정연결리스트 1 -> 2 -> 3 -> 4 가 있다고 가정하고, 이를 4 -> 3 -> 2 -> 1로 반환하고 싶다고 해봅시다. 현재 우리가 위치한 노드를 나타내는 포인터 curr이 있습니다. 처음에는 curr이 1에 위치하게 됩니다. 반전을 위해서는 2가 -> curr을 가리키도록 해야 합니다. 여기서 문제는 curr = curr.next 로 이동하면, 단일 연결리스트이기 때문에 1에 대한 참조가 사라진다는 것입니다. 이를 해결하기 위해 이전 노드를 추적하는 또 다.. 2024. 7. 22.
Linked List 유형 - Fast & Slow 연결 리스트 유형의 풀이 방법 중 하나는  Fast와 Slow라는 두 개의 포인터를 사용하는 것입니다. 두 포인터는 나란히 움직이지 않고, 다른 '속도'로 이동하거나, 다른 위치에서 반복을 시작하는 등의 차이를 의미합니다. 다른 '속도'로 이동한다고 했다면, 일반적으로 Fast 포인터는 반복 당 두 노드를 이동하고, Slow 포인터는 반복 당 하나의 노드를 이동합니다. 코드를 봅시다.// head는 링크드 리스트의 첫 번째 노드를 가리킵니다.func fn(head: ListNode?) { var slow = head var fast = head // fast가 nil이 아니고 && fast.next가 nil이 아닐 때까지 while fast != nil && fast?.next !=.. 2024. 7. 21.
Linked List Linked List메모리 상에 원소들을 불연속적으로 배치한 선형 자료구조불연속적인 대신 이전이나 다음 노드의 위치를 알고 있음리스트의 각 원소를 노드라고 부름노드는 데이터와 다른 노드에 대한 참조를 가짐맨 앞/뒤 노드를 head/tail 노드라고 부름어떤 노드에 대한 참조를 갖느냐에 따라 크게 3가지 종류로 나눌 수 있음 Singly Linked List각 노드는 데이터와 다음 노드에 대한 링크(참조)를 가짐 Doubly Linked List각 노드는 이전, 다음 노드에 대한 링크(참조)를 가짐 Circular Linked List마지막 노드가 헤드 노드에 대한 링크(참조)를 가짐  성질1. 헤드 노드에 대한 참조만 가지고 있기 때문에 임의의 원소에 접근/변경하려면 O(n)의 시간이 소요2. 다른 노드.. 2024. 7. 21.