일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 운영체제
- UserDefaults
- 가상 메모리
- Codable
- deadlock
- core data
- SwiftUI
- COLOR
- decode
- 인프런
- 비동기
- scrollview
- Apple Developer Academy
- 프로세스 스케줄링
- forEach
- struct
- 데드락
- @state
- 동시성
- 알고리즘
- 100 days of SwiftUI
- 상호배제
- 오브젝트
- Swift
- async
- Linked List
- 동기화
- 앨런
- IOS
- Algorithm
Archives
- Today
- Total
기어가더라도 제대로
[LeetCode-Swift] 138. Copy List with Random Pointer 본문
문제 설명
Random Pointer가 있는 Linked List가 있는데 이를 완전 복사를 해서 새로운 Linked List로 만들라
- 이것만 보면 쉬운 문제 같은데 문제는 random 포인터 때문에 어려워졌다.
- 일반적으로 Linked List에서 Node는 Next 포인터 하나가 다음 노드를 가리키고 있다.
- 이 문제에서는 Random이라는 포인터가 추가로 주어짐
풀이
총 3단계로 풀이를 함
- 첫번째 while-loop에서 복사를 한 새로운 Node를 기존 링크드리스트 노드들의 사이에 생성한다.
- 1-1-2-2-3-3-4-4
- random: 1→3, 2→4
- 두번째 while-loop에서 복사한 노드들의 random 포인터를 복사한 노드로 연결한다.
- 1-1-2-2-3-3-4-4
- random: 1→3, 2→4
- copy random: 1→3, 2→4
- 세번째 while-loop에서 반환할 변수, 반복문을 돌 변수, copy 리스트를 볼 변수 3개를 선언해서 돌면서 추출한다.
그림으로 보면 다음과 같다.
코드 예시
소감
- 코드를 봐서 이해가 안되는 때는 빨리 그림을 그리자.
- 답지 코드를 봤는데 그래도 이해가 안갔다. 한 3일 고민한듯
출처
- https://leetcode.com/problems/copy-list-with-random-pointer/description/?envType=study-plan-v2&envId=top-interview-150
'CS > 알고리즘' 카테고리의 다른 글
[LeetCode-Swift] 236. Lowest Common Ancestor of a Binary Tree (0) | 2024.01.23 |
---|---|
[LeetCode-Swift] 92. Reverse Linked List II (0) | 2023.09.16 |
[백준 10986][swift] 나머지합 (0) | 2023.06.23 |
Comments