간단한 문제 요약
2개의 문자열 s t가 주어졌을 때 s가 t의 부분 문자열인지!! 이 문제에서의 부분 문자열이란 t의 문자열에서 몇 개의 문자들을 제거 한 후 합쳤을 때 s와 일치해야 하는 경우.
문제 풀이 | PS일지
s == needle
t == text
tIdx = 0, nIdx = 0
각각의 문자열을 배열로 만든 후에, 각각의 배열에 대해서 따로 따로 탐색할 포인터를 index로 두었습니다.
그리고 text[tIdx] == nIdx[nIdx] 일치하지 않는다면. tIdx값을 증가시키면서 혹은 일치한다면 nIdx를 증가시키면서 각각의 포인터가 해당 배열의 모든 원소를 훑을 때 까지만 비교를 수행했습니다.
문제를 읽긴 했는데.. 왜 처음 풀었을 때 좀 더 빨리 풀려고 소팅을 했을까요,,
그리고 또 이 문제는 답을 제출 할 때 "YES" or "NO" 가 아니라 "Yes" or "No"입니다... 이거때매 두번 틀렸다는 ㅠㅠ
코드
while let input = readLine() {
let temp = input.split{$0==" "}.map{String($0)}
let (text, needle) = (temp[1].map{String($0)},temp[0].map{String($0)})
var tIdx = 0, nIdx = 0
while tIdx < text.count && nIdx < needle.count {
if text[tIdx] == needle[nIdx] { nIdx += 1 }
tIdx+=1
}
print(nIdx == needle.count ? "Yes" : "No")
}
'백준 PS일지 > String' 카테고리의 다른 글
[백준/Swift] 모음의 개수: 1264 | PS일지 (0) | 2023.07.05 |
---|---|
[백준/Swift] 1302: 베스트셀러 | PS일지 (0) | 2023.04.23 |
[백준/Swift] 144256: 접두사 찾기 | PS일지 (0) | 2023.04.18 |
[백준/Swift] 4354: 문자열 제곱 | PS일지 (0) | 2023.02.10 |