[프로그래머스 | Swift | Lv.1] 가장 가까운 같은 글자

Juhee Kim·2025년 5월 28일

알고리즘 풀이

목록 보기
9/9

문제 링크


풀이

import Foundation

func solution(_ s:String) -> [Int] {
    var lastIndex: [Character : Int] = [:]
    var result = Array(repeating: -1, count: s.count)
    
    for (i, c) in s.enumerated() {
        result[i] = lastIndex[c] == nil ? -1 : i - lastIndex[c]!
        lastIndex[c] = i
    }
    
    return result
}

설명

  • 딕셔너리로 각 문자의 마지막 인덱스를 저장

  • result = Array(repeating: -1, count: s.count):
    문자열의 개수만큼 -1 값으로 배열 생성

  • enumerated():
    문자열의 (인덱스, 문자) 튜플을 반환. (i, c) 튜플로 for문에 활용

  • lastIndex[c]nil이면 해당 문자는 처음 나온 문자이므로 -1 저장, 아니라면 현재 인덱스 - 가장 최근에 나왔던 인덱스

💡 딕셔너리의 반환값이 nil인 경우?
Swift 딕셔너리에서 섭스크립트([key])로 접근하면 해당 키가 존재하지 않을 수 있기에 항상 Optional Type을 반환한다.

var dict = ["apple": 5, "banana": 3]
let apple = dict["apple"]    // Optional(5)

처음에는 이차원 배열로 해결하려고 했는데, 동일한 문자에 대해 값을 수정해야 해서 딕셔너리가 더 직관적이라고 판단했다.
다른 사람의 풀이에 비교해봐도 내 코드가 효율적이라고 느껴서 오늘은 다른 사람의 풀이 스킵! 👍

profile
개: 개롭지만 발: 발전하는중

0개의 댓글