티스토리 뷰

728x90

 

https://school.programmers.co.kr/learn/courses/30/lessons/120838

 

문제 사진

내 풀이

import Foundation
// 1 
let morse = [
    ".-": "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"
]

func solution(_ letter:String) -> String {
    return letter
        // 2
        .components(separatedBy: " ") // ["....", ".", ".-..", ".-..", "---"]
        // 3
        .compactMap { morse[$0] } //   ["h", "e", "l", "l", "o"]
        // 4
        .joined()                 //   hello
}

solution(".... . .-.. .-.. ---")

 

  1. 각각의 모스부호들을 Dictionary 타입 (key: value)으로 만듭니다.
  2. 파라미터로 주어지는 String타입의 letter를 띄워쓰기 마다 한 요소씩 분리 합니다 ( components(separatedBy: " ") 사용 )
  3. 고차함수 compactMap를 사용하여 morse[$0]에 접근할때 마다 각 요소별 Optional값을 해제 해줍니다.
  4. 하나씩 나눠진 ["h", "e", "l", "l", "o"] 요소들을 합침 ( joined() 사용 )

배운것

알고리즘을 그래도 꾸준히 풀다보니 여러가지 메서드들을 적재적소에 조합해서 사용할 수 있게 되는것 같다. 

joined(), components(separatedBy:) 등을 몇번 사용하는걸 보고 직접 적용해보니 메서드를 많이 알고 있을 수록 코드도 간결해지는것  같다.

728x90