본문 바로가기
코딩테스트

프로그래머스 Javascript 코딩 테스트 Lv.0 모스부호 (1)

by 곰인간 2023. 7. 4.

모스부호

이번에 푸는 문제는 모스부호(1) 문제이다.

일단 위의 문제에서 주어지 듯이 모스 부호에 따라 key, value값으로 모스부호와 알파벳이 묶여있다.

 

function solution(letter) {
    const 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'
}
    const codes = letter.split(' ')
    let result = ''
    for (let i = 0; i < codes.length; i++) {
        const code = codes[i]
        if (code in morse) {
            result += morse[code]
        }
    }
    return result
}

첫 번째 문제풀이는 for반복문을 이용한 문제풀이다.
(for in은 객체에 주로 사용)

일단 예시에 있는 대로 morse변수에 모스부호 객체를 할당하고,

codes 변수를 선언해서 매개변수 letter를 split(' ')을 사용해서 배열로 만들어준다.
split('')이렇게 하면 안된다! 문자열에 공백을 주지 않으면 단어가 아닌  음절 단위로 나뉜다.(국어문법에 예를 들면)
. const A = "수박 사과"
ex1 A.split(' ') = ["수박", "사과"]
ex2. A.split('') = ["수", "박", "사", "과"]

그리고 result 변수의 값으로 빈 문자열을 할당하고,

for반복문을 통해 매개변수 letter를 배열로 변경한 길이 보다 작게 반복한다.

code는 code의 인덱스에 있는 요소이다.

if조건문을 통해 code가 morse객체의 key인지 확인한다.

true면 morse객체에서 key값인 code의 value값을 result에 더해준다.


두 번째 방법은

아스키 코드를 이용해서 문제를 풀었다.

입출력 예 설명 밑에보면 

  • a ~ z에 해당하는 모스부호가 순서대로 담긴 배열입니다.
  • {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}

이렇게 되어 있다.

function solution(letter) {
    const morse = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..",
    "--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
    const toArr = letter.split(' ')
    
    const toAscii = toArr.map(code => morse.indexOf(code) + 97)
    
    return String.fromCharCode(...toAscii)
}

위와 마찬가지로 매개변수 letter를 split을 이용해서 배열로 만들었고, toArr변수를 선언해서 할당했다.

toArr배열을 map메서드를 이용해서 각 배열의 요소를 code로 매개변수로 주고 indexOf를 이용해서 morse의 배열에서 몇번째 배열인지 찾아서 + 97을 해준다.
(아스키 코드에서 소문자 a는 97이다.)

그리고 아스키 코드 값을 문자열로 바꾸는 로직을 이용해서 toAscii의 배열의 인덱스를 문자열로 변경했다

 

댓글