[알고리즘] Swift -프로그래머스 연습문제 #142086(가장 가까운 같은 글자)

2023. 5. 24. 14:00ALGORITHM/Swift

728x90
반응형

문제링크

 

 

 

 

분석

문자열 s 가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서 자신과 가장 가까운 곳에 있는 같은 글자가 어디있는지 찾고 싶다.

예를 들어 s = "banana" 일 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음으로 진행할 수 있다.

  • b는 처음에 나왔기 때문에 자신의 앞에 같은 글자가 없다. 이는 -1로 표현한다.
  • a는 처음에 나왔기 때문에 자신의 앞에 같은 글자가 없다. 이는 -1로 표현한다.
  • n도 똑같이 -1로 표현한다.
  • a는 자신보다 2칸 앞에 a가 있다. 이는 2로 표현한다.
  • n은 자신보다 2칸 앞에 n이 있다. 이는 2로 표현한다.
  • a는 자신보다 2칸, 4칸 앞에 a가 있다. 이 중 가까운 것은 2칸 앞이므로 2로 표현한다.
  • 따라서 최종 결과는 [-1, -1, -1, 2, 2, 2]가 된다.

정의된 연산을 수행하는 함수를 만드는 문제이다.

 

풀이 과정

글자 하나 씩 배열에 포함되어있는 지 확인 한 후에 없으면 -1를 추가하고

있다면 마지막 인덱스를 확인하여 자신의 인덱스의 차이를 구하여 추가한다.

 

 

풀이

import Foundation

func solution(_ s:String) -> [Int] {
    var result = [Int]()
    let sArr = Array(s)
    var arr = [Character]()
    
    for ch in sArr {
        if let last = arr.lastIndex(of: ch) {
            result.append(arr.count - last)
        } else {
            result.append(-1)
        }
        arr.append(ch)
    }
    
    return result
}

 

결과

print(solution( "foobar"    ))

 

 

 

 

 

 

728x90
반응형