티스토리 뷰
728x90
문제 사진
구조체 Stack 2개를 사용해서 Queue의 기능을 구현
내 풀이
struct Stack<T> {
private var stack: [T] = []
public var isEmpty: Bool {
return stack.isEmpty
}
public var count: Int {
return stack.count
}
public mutating func push(_ el: T) {
stack.append(el)
}
public mutating func pop() -> T? {
return isEmpty ? nil : stack.popLast()
}
}
struct Queue<T> {
var s1 = Stack<T>()
var s2 = Stack<T>()
public mutating func inQueue(_ el: T) {
s1.push(el)
}
public mutating func deQueue() -> T? {
var savedValue: T?
if s1.isEmpty { // 1
return nil
} else if s1.count == 1 { // 2
return s1.pop()!
}
for _ in 1...s1.count { // 3
if s1.count > 1 {
s2.push(s1.pop()!)
} else {
savedValue = s1.pop()!
for _ in 1...s2.count {
s1.push(s2.pop()!)
}
return savedValue
}
}
return nil
}
}
var queue1 = Queue<Int>()
queue1.inQueue(1) // 1
queue1.inQueue(2) // 2
queue1.deQueue() // 1
queue1.deQueue() // 2
queue1.deQueue() // nil
queue1.deQueue() // nil
- s1.count가 0 이면 더이상 뺄게 없으므로 nil을 리턴
- s1.count가 1 이면 그것만 빼서 리턴
- s1.count가 2이상이면 for 루프를 이용해서 s1 첫번째 인덱스를 제외하고 s2로 다 push
- for 루프에서 s1 첫번째 인덱스만 남게 되면 var savedValue 에 s1.pop()을 이용해 할당 --> s1은 요소가 없는상태
- s2로 몰려온 요소들을 다시 s1으로 push (s1 배열 순서 원상복구)
제네릭을 어떻게 다뤄야 하는건지 조금은 숙달이 된것 같다.
코드가 지저분해 보이는데 리팩토링해서 조금 보완해봐야겠다.
728x90
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] - 약수의 개수와 덧셈 (Programmers) (0) | 2022.10.18 |
---|---|
[Swift 알고리즘] - 하샤드 수 (Programmers) (0) | 2022.10.17 |
[Swift 알고리즘] - 문자열 다루기 기본(Programmers) (0) | 2022.10.13 |
[Swift 알고리즘] - 2016년 (Programmers) (0) | 2022.10.12 |
[Swift 알고리즘] - 자릿수 더하기 (Programmers) (0) | 2022.10.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Swift 프로퍼티
- swift property
- Swift init
- swift protocol
- Swift 프로그래머스
- swift reduce
- Swift
- swift (programmers)
- Class
- Swift 알고리즘
- Swift Error Handling
- 원티드 프리온보딩
- removeLast()
- Swift 내림차순
- ios
- Swift joined()
- Swift joined
- Swift ModernRIBs
- swift programmers
- iOS error
- RTCCameraVideoCapturer
- Swift RIBs
- RIBs tutorial
- swift 고차함수
- Swift inout
- Swift Leetcode
- CS 네트워크
- 2023년 회고
- Combine: Asynchronous Programming with Swift
- Swift final
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함