swift 자료구조 - 연결리스트 코드로 정리 - 2 지난 포스팅에서 swift로 연결리스트를 구현하고 Node들을 추가하는 기능까지 구현을 했습니다. Node들을 추가하는 함수에는 push, append, insert 를 각각 구현했죠. push는 연결리스트에서 새 노드를 연결리스트 제일 앞에 추가하는 함수입니다. append 는 연결 리스트에서 새 노드를 연결리스트 제일 뒤에 추가하는 함수 입니다. insert는 연결 리스트에서 새 노드를 특정 위치에 삽입하는 함수입니다. 위의 내용인 swift 자료구조 - linkdedlist 연결리스트 코드로 정리 - 1 이 포스팅에 모두 자세히 적어 놓았습니다. 이 포스팅을 읽기전에 위의 포스팅을 먼저 읽고 오셔야 이해가 됩니다. 그럼 이번 포스팅에서는 swif..
swift 자료구조 - 연결리스트 코드로 정리 연결 리스트 연결리스트는 배열의 단점을 보완한 자료구조입니다. 배열의 단점으로는 크게 2가지가 있습니다. [1] 배열을 선언할 때 배열의 크기를 지정해버리면 지정한 크기 만큼 요소를 할당 할 수 있다는 것. 즉, 배열의 크기가 5면 요소를 6개, 7개 할당을 할 수 가 없다는 것입니다. [2]배열 안의 요소를 삭제할 때 오버헤드가 커진다. 예를 들어 1부터 5까지 5개의 요소가 들어 있는 배열에서 정 가운데 있는 숫자 3을 삭제한다면? 숫자 3의 자리는 비게 되고 빈공간을 채우기 위해서 뒤에 위치한 숫자 4와 5가 한칸씩 앞으로 이동하게 됩니다. 예제가 배열의 크기가 5개라서 그렇지 만개 십만개라면? 그 오버헤드는 엄청 클것입니다. 그래서 연결리스트 자료구조..
swift 리트코드 문제풀이 - leetcode 2 두 수의 덧셈 2. Add Two Numbers 문제 역순으로 저장된 연결 리스트의 숫자를 더하라. 문제의 이해 인자로 두개의 연결리스트가 주어진다. 연결리스트 안의 값은 숫자타입이다. 예를 들어 [1,4] 연결 리스트 F와 [4,7,8] 연결 리스트 S가 주어졌다고 하면 연결리스트 안의 숫자들을 그대로 더해주면 된다. 위의 그림의 예제 처럼 연결리스트 안의 숫자를 다시 뒤집을 필요도 없다. 그냥 주어진 연결리스트 안의 노드 순서대로 숫자 하나씩 더해가면 된다. 1과 4를 더하면 = 5 4와 7을 더하면 = 11 여기서 중요한게 10보다 같거나 크면 올림수를 처리해줘야 한다. 올림수는 carry라는 변수를 만들어서 저장하고 처리한다. 그럼 다시 4와 7..
swift 리트코드 문제풀이 - leetcode 24 페어의 노드 스왑 24. Swap Nodes in Pairs 문제 연결 리스트를 입력받아 페어 단위로 스왑(Swap)하여라. 문제의 이해 문제 내용을 한번 살펴보면! 문제의 제시문 그대로다... 인자로 연결 리스트가 주어지고, 우리는 우리가 구현할 함수 안에서 이 주어진 연결 리스트 안의 노드들의 값을 둘씩 짝을 지어서 서로 교환해서 리턴해주면 된다. 예를 들어 위의 그림에서 1,2,3,4 연결리스트가 들어왔으면 둘씩 짝을 지으면 (1,2) (3,4) 이렇게 짝을 지을 수 있다. 그리고 짝지어진 노드들을 서로 바꾸면 (2,1) (4,3) 이렇게 작성할 수 있겠다. 자 그럼..! 풀이 시나리오 [1] 일단 연결리스트의 모든 노드들을 스캔해야 되기 때문에..
swift 리트코드 문제풀이 - leetcode 206 역순 연결리스트 206. Reverse Linked List 문제 연결리스트를 뒤집어라 얼핏보고 좀 간한하네? 라고 생각했다. 연결리스트의 point를 이용해서도 뒤집을 수 있을 것 같은데 이번에도 swift의 배열을 이용해보기로 했다. 1.함수안에 빈배열을 선언한다. 2.입력 받은 연결 리스트를 while문을 돌면서 배열에 값을 넣어준다. 3.배열을 뒤집는다. 4.배열안의 요소를 연결리스로 만들어 준다. 끝~! 위의 아이디어를 토대로 소스코드를 작성해보았다. public class ListNode { public var val: Int public var next: ListNode? public init() { self.val = 0; self.n..
swift 리트코드 문제풀이 - leetcode 21 두 정렬 리스트의 병합 leetcode 21. Merge Two Sorted Lists 문제 아래 처럼 정렬이 되어 있는 두 연결 리스트를 합하라. 위의 그림에서 빨간색 연결리스트를 A 연결리스트라고 하고 보라색 연결 리스트를 B라고 해보자 리트코드 swift 답쓰기란을 보면 아래와 같은 함수가 주어진다. 아래 함수를 호출 할때 연결리스트 A와 연결 리스트 B를 인자로 전달하면 아래 함수는 두 A,B 연결리스트 안의 숫자들을 비교해서 오름차순으로 정렬한 새로운 연결리스트 C를 리턴해주면된다. func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { return } 일단 문제를 보자마자 든..