알고리즘/프로그래머스 풀이

[프로그래머스] 가장 가까운 같은 글자

whaeun 2022. 12. 16. 14:18

문제: https://school.programmers.co.kr/learn/courses/30/lessons/142086

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🌼 사담

급한 마음에 논스톱 알고리즘 풀기를 하다 보니 예전 출제진 조건을 맞출 당시 하루 종일 알고리즘 문제를 풀던 때가 생각이 나는 것 같다. 그래도 문제를 풀어나가며 Swift로 알고리즘 문제를 푸는 것에 그나마 익숙해 지고 있는 것 같아 다행이다. 앞으로는 C++로만 문제를 풀지 말고 Swift로 문제 푸는 것을 계속 병행해야 겠다..

 

🛠 문제 풀이

해당 문제는 문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 자신과 얼마나 떨어져 있는지를 배열에 담아 반환하는 문제이다.
이를 해결하기 위해 알파벳 각각의 마지막 위치 인덱스를 저장하는 배열 alpha를 생성했고 문제의 조건 중 주어지는 입력 값이 모두 소문자임이 보장되고 있었기 때문에 아스키코드를 a의 값이 97임을 활용해 주어진 문자열의 각 문자에 대해 (문자의 아스키 코드 값 - 97)로 배열에 접근할 수 있도록 하여 아직 배열의 값이 -1일 경우, result 배열에 -1을 저장하고 배열의 다른 값이 존재할 경우, 현재 탐색하고 있는 인덱스와 배열에 저장되어 있는 인덱스의 차를 구하여 저장하도록 했다.

- var alpha = [Int](repeating: -1, count: 27) : Int 형식의 배열을 27개의 -1로 초기화한다.
- s.count : 문자열 s의 길이
- Int(c.asciiValue!) : 문자 c의 아스키코드 값을 반환하여 Int형식으로 변환한다.

import Foundation

func solution(_ s:String) -> [Int] {
    var alpha = [Int](repeating: -1, count: 27)
    var result = [Int](repeating: 0, count: s.count)
    
    var i : Int = 0
    
    for c in s {
        
        var index :Int = Int(c.asciiValue!) - 97
        
        if alpha[index] == -1 {
            result[i] = alpha[index]
        }
        else {
            result[i] = i - alpha[index]
        }
        
        
        alpha[index] = i
        i+=1
    }
    
    return result
}