간단한 문제 요약
Case별로 한 문장에서 space로 띄어쓰기 된 단어를 반대로 뒤집어라!
문제 풀이
LIFO(Last In First Out)의 특징을 지닌 stack으로 풀 수 있습니다. stack의 특성상 pop을 해야할 때 가장 최근에 stack의 list에 삽입된 top에 있는 원소가 pop됩니다.
Swift 고차함수, reversed()를 통해서 아주 간단히 풀 수 있습니다.
(1...Int(readLine()!)!).map{ print("Case #\($0): \(readLine()!.split{$0==" "}.reversed().joined(separator: " "))") }
근데 stack을 구현해보고 싶어서 구현해봤습니다.
struct Stack<T> {
typealias Element = T
private var lists: [Element]
init(lists: [Element] = [Element](), type: Element.Type) {
self.lists = lists
}
}
extension Stack {
mutating func push(_ element: Element) {
lists.append(element)
}
mutating func pop() -> Element?{
guard count != 0 else { return nil }
return lists.removeLast()
}
var count: Int {
return lists.count
}
var top: Element {
return lists[count-1]
}
}
기본적인 push, pop, top원소, stack에서 보유중인 Element를 출력하는 count!
_=(1...Int(readLine()!)!).map{ caseIndex in
var stack = Stack(type: String.self)
var reversedText = ""
for text in readLine()!.split{$0==" "} {
stack.push(String(text))
}
while let text = stack.pop() {
reversedText += "\(text) "
}
print("Case #\(caseIndex): \(reversedText)")
}
그리고 stack에 원소를 추가한 후에 while구문으로 더 이상 pop을 하지 않을 때까지 pop된 Element를 reversedText에 추가해줬습니다.
확실히 라이브러리를 사용하는게 간편하네요,,
'백준 PS일지 > Stack' 카테고리의 다른 글
[백준/C언어] 4949번 : 균형잡힌 세상 _코드리뷰+ 느낀점 (0) | 2021.09.26 |
---|---|
[백준/C언어] 10773번 : 제로 . 코드리뷰 + 느낀점 (0) | 2021.09.23 |
[백준/C언어] 9012번 :괄호 . 코드 리뷰+느낀점 (0) | 2021.09.23 |
[백준/C언어] 10828번 : 스택 . 코드 리뷰 (0) | 2021.09.22 |