[Swift] [57일차] 3324_LEET

·2025년 2월 2일
0

SwiftAlgorithm

목록 보기
60/105

3324. Find the Sequence of Strings Appeared on the Screen


문제설명

  1. KEY 1,2중에 시행을 할 것
  2. KEY1 -> 문자열에 "a"추가, KEY2 -> 문자열을 1레벨업 (a -> b, c->d)
  3. 그렇게해서 이제 주어진 문자열을 만드는 과정을 배열에 담아서 출력해라 !

문제 풀이

  1. 지난번 문제처럼 (모음) 알파벳 배열을 선언해주고 시작하면 더 효율적일 것 같았다.
  2. 이번에는 순서도 중요하므로 SET말고 Array로 해줬다.
var alphabet = Array("abcdefghijklmnopqrstuvwxyz")
  1. 그래서 지금 얼만큼 레벨업을 거쳐야하는지(KEY2)를 index(of:)로 판단만해주면 쉽게 풀릴듯?했다.
alphabet.index(of: target_arr[cnt])!

최종코드

class Solution {
    func stringSequence(_ target: String) -> [String] {
        var answer = [String]()
        let target_arr = Array(target)
        let alphabet = Array("abcdefghijklmnopqrstuvwxyz")
        var tmp = ""
        while tmp != target {
            let cnt = tmp.count // 현재 길이
//            String(target_arr[cnt]) == tmp
//            tmp_arr.append("a") // KEY 1

            for i in 0 ... (alphabet.index(of: target_arr[cnt])!) { // KEY2 차례 a-> 도착점까지
                let nowString = tmp + String(alphabet[i])
                answer.append(nowString)
            }
            tmp = answer.last!
        }
        return answer
    }
}

보면은 알 수 있듯이, 이게 tmp가 찐 본체고, 문자열을 계쏙해서 누적시키려면 a부터 돌때동안 이전까지 만든걸 터치안하기 위해서 nowString으로 볼 수 있듯이 한 자릿수마다 for문 돌려주면서 tmp에 현재 추가하고자 하는 문자열을 넣어서 그 과정이 쉽게 보일 수 있도록했다.

let nowString = tmp + String(alphabet[i])

마지막으로는 tmp를 방금 반복문이 끝난 상태로 들어간 answer.last!로 최신화 해준것이다.
나머지는 자리마다 반복된다.

속도에 있어서 크게 기대는 안했는데, 높게 나와서 나름 뿌듯했다. 100%에 해당하는 코드를 보자면..

타인의 코드

class Solution {
    func stringSequence(_ target: String) -> [String] {
        var result = [String]()
        var prefix = ""
        let allChars: [Character] = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

        for c in target {
            for c2 in allChars {
                result.append(prefix + String(c2))
                if c2 == c {
                    break
                }
            }
            prefix += String(c)
        }
        return result
    }
}

굳이 index를 찾아줄 필요도 엇이 반복문돌면서 같은 문자열 나오면 break해줘서 깔끔하게 처리한걸 볼 수 있었다. 풀면서 느낀건데 이게 다른 더 어려운 문제처럼 위로만 레벨업하는게아니라 아래로도 레벨업하는 문제였으면 좀 더 어려워지겠구나 싶었다.

profile
기억보단 기록을

0개의 댓글