반응형
문제 풀이:
이 문제의 핵심은 2개의 스택을 사용하는 것이다.
L: 왼쪽 스택에서 pop하고 그 값을 오른쪽 스택에 추가한다.
D: 오른쪽 스택에서 pop하고 그 값을 왼쪽 스택에 추가한다.
B: 왼쪽 스택에서 pop한다.
P: 왼쪽 스택에 값을 추가한다.
오른쪽 스택은 문자열이 거꾸로 추가되었으므로 마지막에 오른쪽 스택을 reversed해줘야 한다.
처음에 배열로 접근해서 풀었을 때 스위프트는 시간초과가 나고 파이썬은 같은 풀이로 푼 문제가 맞았다.
원인은 스위프트에서 readLine()!.split(separator: " ").map { Int(String($0))! } 를 통해
Int형 배열로 입력을 받는 과정에서 시간이 더 소모된 것이 영향이 있는 것 같다.
그래서 스위프트는 배열로 입력을 받지 말고 String으로 바로 풀어야 시간초과를 피할 수 있다.
코드:
Swift
// switch 풀이
var left = readLine()!
var right = ""
let m = Int(readLine()!)!
for _ in 0 ..< m {
let cmd = readLine()!
switch cmd {
case "L":
if !left.isEmpty {
right.append(left.removeLast())
}
case "D":
if !right.isEmpty {
left.append(right.removeLast())
}
case "B":
if !left.isEmpty {
left.removeLast()
}
default:
left.append(cmd.last!)
}
}
print(left + right.reversed())
// if 풀이 (gustn3065님의 풀이)
var left = readLine()!
var right = ""
for _ in 0 ..< Int(readLine()!)! {
let cmd = readLine()!
if cmd == "L", !left.isEmpty {
right.append(left.removeLast())
} else if cmd == "D", !right.isEmpty {
left.append(right.removeLast())
} else if cmd == "B" {
left.popLast()
} else {
left.append(cmd.last!)
}
}
print(left + right.reversed())
Python
import sys
input = sys.stdin.readline
left = list(input().strip())
right = []
n = int(input())
for _ in range(n):
cmd = input()
if cmd[0] == 'L' and left:
right.append(left.pop())
elif cmd[0] == 'D' and right:
left.append(right.pop())
elif cmd[0] == 'B' and left:
left.pop()
elif cmd[0] == 'P':
left.append(cmd[2])
print(''.join(left+list(reversed(right))))
문제:
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[Algorithm/BOJ] 4889 - 안정적인 문자열 Swift Python (0) | 2021.05.21 |
---|---|
[Algorithm/BOJ] 18258 - 큐2 Swift Python (0) | 2021.05.12 |
[Algorithm/BOJ] 1302 - 베스트셀러 Swift Python (0) | 2021.05.09 |
[Algorithm/BOJ] 2504 - 괄호의 값 Swift (0) | 2021.05.01 |
[Algorithm/BOJ] 5557 - 1학년 (DP) Swift (0) | 2021.04.29 |
댓글