일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 영문 개인정보처리방침
- 한국어 개인정보처리방침
- dispatchsource
- Required Reason API
- weak var
- SwiftUI Boolean 값
- 단일 책임원칙
- weatherKit
- WeatherManager
- font book
- UICollectionViewFlowLayout
- App Store Connect
- addannotation
- MKMapViewDelegate
- AnyObject
- CLLocationManagerDelegate
- Timer
- xcode로 날씨앱 만들기
- Startign Assignments
- Xcode
- UIAlertAction
- CoreLocation
- 러닝타이머
- Protocol
- 클로저의 캡슐화
- RunningTimer
- 러닝기록앱
- 서체관리자
- swift
- MKMapItem
- Today
- Total
VesselWheel
크기가 작은 부분문자열 본문
문제
풀이
import Foundation
func solution(_ t:String, _ p:String) -> Int {
let length = p.count // p는 1 ≤ p의 길이 ≤ 18 를 갖음
var count = 0 // 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수
for i in 0..<(t.count-length+1) {
let startIndex = t.index(t.startIndex, offsetBy: i)
let endIndex = t.index(t.startIndex, offsetBy: i+length)
let range = startIndex..<endIndex
if Int64(t[range])! <= Int64(p)! {
count += 1
}
}
return count
}
해석
1. let length = p.count : 파라미터 p의 길이를 우선 구하고
2. var count = 0 : 반환값인 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 얻기 위해 0으로 초기화
3. for문으로 임의의 순회 값인 i 를 (t.count-length+1)까지 반복순회한다.
3-1. (t.count-length+1) : length(p의 문자열 길이)의 +1은
4. index(_:offsetBy:) 메소드는 주어진 기준 인덱스로부터 특정 거리만큼 떨어진 위치의 인덱스를 반환
for i in 0..<(t.count-length+1)을 통해 i는 0부터 t.count-length까지 반복됩니다. 이는 문자열 t에서 길이가 p와 같은 부분문자열의 시작 인덱스를 나타냅니다.
예를 들어, t의 길이가 5이고 p의 길이가 3이라고 가정해봅시다. 이 경우 t에서 길이가 3인 부분문자열의 시작 인덱스는 0, 1, 2가 됩니다. 이때 t.count-length는 2가 되므로, for i in 0..<t.count-length로 하면 i는 0과 1만을 반복하게 됩니다. 따라서 t에서 시작 인덱스가 2인 부분문자열을 빠뜨리게 됩니다.
이를 방지하고 모든 부분문자열을 탐색하기 위해 +1을 해줍니다. 이렇게 해주면 i는 0, 1, 2를 모두 반복하게 되어 t에서 길이가 3인 모든 부분문자열을 탐색할 수 있게 됩니다.
4-1. index(_:offsetBy:) 메소드는 주어진 기준 인덱스로부터 특정 거리만큼 떨어진 위치의 인덱스를 반환
예를 들어, t.index(t.startIndex, offsetBy: i)는 문자열 t의 시작 위치에서 i만큼 떨어진 위치의 인덱스를 반환
5.
'Coding Test Practice in Swift' 카테고리의 다른 글
시저암호 (1) | 2024.02.28 |
---|---|
최소직사각형 (0) | 2024.02.23 |
삼총사 (considering 시간복잡도) / 시간복잡도를 고려하니 중복값 문제 발생 (0) | 2024.02.20 |
이상한 문자 만들기 (0) | 2024.02.19 |
3진법 뒤집기 (1) | 2024.02.02 |