Where who wants to meet someone
특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181872
내 답안 / 다른 사람들의 답안
import Foundation
func solution(_ myString:String, _ pat:String) -> String {
let index = myString.lastIndex(of: pat.last!)!
return myString.prefix(through: index).map { String($0) }.joined()
}
- pat의 마지막 글자의 lastIndex를 index에 담고 prefix(through:)를 통해 myString의 처음부터 index까지의 글자를 추출, map과 joined를 사용하여 String으로 만든 후 반환
// 풀이 1
import Foundation
func solution(_ myString:String, _ pat:String) -> String {
var str = myString
while str.hasSuffix(pat) == false {
str = String(str.dropLast())
}
return str
}
// 풀이 2
import Foundation
func solution(_ myString:String, _ pat:String) -> String {
guard let range = myString.range(of: pat, options: .backwards) else {
return ""
}
return String(myString.prefix(upTo: range.upperBound))
}
- 내 풀이의 경우 pat이 여러 글자일 때 하나만 마지막에 있어도 예외사항이 발생
- 풀이 1을 사용하면 suffix가 pat이 될 때까지 dropLast를 하는 방식을 사용하여 해결
- 풀이 2는 pat을 포함하는 범위를 뒤에서부터 확인하여 range에 담고, 그것을 사용하여 prefix 메서드 사용
여기서 upTo와 upperBound를 사용하는 이유는 먼저, range를 prefix에서 사용하기 위해서는 upperBound 또는 lowerBound를
써야 한다. Range<String.Index> 가 아닌 String.Index가 필요하기 때문.
lowerBound는 range의 첫부분, upperBound는 끝 부분 다음 인덱스이기에 pat을 다 표현하기 위해서는 upperBound를 쓰되
불필요한 글자를 제거하기 위해 upTo를 사용하는 것
점수: +1
'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글
문자열이 몇 번 등장하는지 세기 (0) | 2024.02.16 |
---|---|
문자열 묶기 (0) | 2024.02.14 |
배열 만들기 6 (0) | 2024.02.13 |
세 개의 구분자 (1) | 2024.02.13 |
배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2024.02.08 |