내 풀이
import Foundation
func solution(_ s:String) -> [Int] {
var answer: [Int] = []
let elements = s.map {
String($0)
}
for i in 0..<elements.count {
var index = i
var isArray = false
while (index > 0) {
index -= 1
if elements[index] == elements[i] {
answer.append(i - index)
isArray = true
break
}
}
if isArray == false {
answer.append(-1)
}
}
return answer
}
- 문자열 s를 배열 elements로 변환
→ elements 배열에 각 문자가 요소로 저장 됨
- for 루프를 사용하여 각 문자의 인덱스 순회
- 현재 문자와 그 전 문자들을 비교하기 위해 while 루프 사용
→ 이전 문자들을 순회하기 위한 인덱스 변수 index 활용
- 현재 문자와 이전 문자가 같은 경우 : 두 문자의 거리를 계산하여 answer 배열에 추가
→ 거리는 현재 인덱스에서 이전 인덱스를 뺀 값으로 계산
- 이전 문자들을 모두 확인했음에도 같은 글자가 없는 경우에는 -1을 answer 배열에 추가
또 다른 풀이
와 이렇게 풀 수도 있구나...
func solution(_ s: String) -> [Int] {
return s.enumerated().map { (i, c) in i - (Array(s)[0..<i].lastIndex(of: c) ?? i + 1) }
}
- s.enumerated(): 문자열을 순회하면서 각 문자의 인덱스와 문자를 가져옴
- map 함수 : 순회한 각 요소에 대해 클로저 적용
→ 클로저 : 문자열의 인덱스 i와 해당 문자 c를 받음
- 클로저 내부에서는 현재 문자의 인덱스와 이전에 등장한 같은 문자의 인덱스 계산
- 이전에 확인된 같은 문자의 인덱스를 찾기 위해 Array(s)[0..<i]를 사용하여 현재 문자 이전의 문자열 슬라이스를 만듬
- 슬라이스에 lastIndex(of: c)를 사용하여 현재 문자 c의 마지막 인덱스 찾기
→ 만약 존재하지 않으면 nil을 반환하고,
이 경우를 대비해 ?? i + 1을 사용하여 기본값으로 현재 인덱스보다 한 칸 뒤의 인덱스 사용
- 현재 인덱스와 이전에 등장한 같은 문자의 인덱스의 차이를 계산하여 반환
' 𝗔𝗣𝗣𝗟𝗘 > ALGORITHM' 카테고리의 다른 글
[내일배움캠프] 데일리 루틴(iOS_3회차) - 콜라 문제 (0) | 2024.03.15 |
---|---|
[내일배움캠프] 데일리 루틴(iOS_3회차) - 푸드 파이트 대회 (0) | 2024.03.14 |
[내일배움캠프] 데일리 루틴(iOS_3회차) - 두 개 뽑아서 더하기 (2) | 2024.03.12 |
[내일배움캠프] 데일리 루틴(iOS_3회차) - K번째수 (2) | 2024.03.11 |
[내일배움캠프] 데일리 루틴(iOS_3회차) - 문자열 내 마음대로 정렬하기 (0) | 2024.03.08 |