대놓고 딕셔너리 타입을 써보렴 하고 내준 문제인듯 하나..
아직 고차함수등의 활용이 익숙하지 않고, 딕셔너리 값 탐색이 생각보다 귀찮아서 다른 방식으로 풀게 되었다.

import Foundation

func solution(_ letter:String) -> String {

    var morse:[String] = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

    var result:String = ""
    var temp = letter.split(separator: " ")

    for val in temp
    {
        if let firstIndex = morse.firstIndex(of: String(val)) 
        {
            result.append(String(UnicodeScalar(97 + firstIndex)!))
        }
    }

    return result
}

풀이 과정

입력 받은 배열은 공백 기준으로 잘라서 검색해야하기 때문에 split으로 나누어 temp에 저장해두었다. 이후 temp의 요소들을 검색하여 해당 인덱스 위치를 찾고 아스키로 변경하여(a + ?) result 배열에 append 해주었다.

형변환

간단한 문제임에도 굳이 풀이를 남기려는 이유
스위프트는 형변환이 제한적이고 대부분의 묵시적 형변환을 허용하지 않는다. 자주 쓰이는 메서드의 형변환은 기억해 둘 필요가 있을듯 하다.

split 메서드는 substring 타입을 리턴하기때문에 String으로 바꾸어 접근해야했다.
SubString이라는 타입은 왜 있으며 왜 사용할까? 참고자료 다시 읽어보기.

아스키<->Int를 변환할때 사용하는 UnicodeScalar는 옵셔널을 리턴하기 때문에 !을 붙여 언래핑 후 사용해야한다.

숫자->아스키는 위의 풀이코드와 같이 사용하고
아스키->숫자는 아래 방식으로 사용해야한다.

Int(UnicodeScalar(a)!.value)

참고 자료

Substring은 왜 있는걸까?
UnicodeScalar

profile
42seoul - C, C++ / YagomAcademy - Swift

0개의 댓글