안녕하세요. 개발 중인 정주입니다.
오늘은 백준 BOJ - 9935 문자열 폭발 폭발 문제를 풀었습니다.
목차
Github
GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘
스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.
github.com
문제 링크
https://www.acmicpc.net/problem/9935
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
풀이
이번 문제는 스택을 이용한 문제입니다.
지금까지는 top 1개의 아이템만 비교했다면 이번 문제는 input에 대해 체크해야 할 아이템 개수가 달라집니다.
추가로 이번 문제는 시간제한이 꽤 빡세다고 느꼈습니다.
통과를 한 후에도 여러 가지로 시도를 해봤는데 다 시간제한이 나더라고요.
input만큼 append를 하고 input과 폭발 단어의 마지막과 비교합니다.
동일하면 stack의 길이만큼 아이템을 가져와서 폭발 단어와 동일한지 확인합니다.
폭발 단어라면 그 길이만큼 pop을 해줍니다.
마지막에 스택이 비어있다면 FRULA, 아니라면 stack을 출력해줍니다.
전체 코드
//9935 문자열 폭발
import Foundation
var input = String(readLine()!)
let bomb = String(readLine()!)
var stack: [Character] = []
for s in input {
stack.append(s)
if s == bomb.last! {
let count = stack.count
if count >= bomb.count && String(stack[(count-bomb.count)...]) == bomb {
(0..<bomb.count).forEach { _ in
stack.popLast()
}
}
}
}
print(stack.isEmpty ? "FRULA" : String(stack))
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.