저장을 습관화

프로그래머스 LV.0 모스부호 (1) 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 모스부호 (1)

ctrs 2023. 9. 21. 01:41

프로그래머스 LV.0 모스부호 (1)

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제 명

모스부호 (1)


2. 문제 설명

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

모스부호는 다음과 같습니다.

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'
}


3. 제한 사항

- 1 ≤ letter의 길이 ≤ 1,000

- return값은 소문자입니다.

- letter의 모스부호는 공백으로 나누어져 있습니다.

- letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.

- 해독할 수 없는 편지는 주어지지 않습니다.

- 편지의 시작과 끝에는 공백이 없습니다.


4. 예시

letter result
".... . .-.. .-.. ---" "hello"
".--. -.-- - .... --- -." "python"


5. 기본 제공 코드

function solution(letter) {
    var answer = '';
    return answer;
}


6. 제출한 내 답

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 solution = (letter) => {
  return letter
    .split(" ")
    .map((v) => {
      return morse[v];
    })
    .join("");
};

 

6-2. VSC에 작성한 내용

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 solution = (letter) => {
  return letter
    .split(" ")
    .map((v) => {
      return morse[v];
    })
    .join("");
};

// 테스트
console.log(solution(".... . .-.. .-.. ---"));
console.log(solution(".--. -.-- - .... --- -."));


7. 특이사항

https://ctrs.tistory.com/281

전에 풀었던 문제에서 객체로 풀었던 사람이 생각나서 참조했음


8. 다른 사람이 작성한 답

8-1. 하드코딩

function solution(letter) {
    let answer = "";

        let a = letter.split(" ");

        for(let i=0; i<a.length; i++){
            if(a[i] == ".-"){
                answer += "a";
            }
            else if(a[i] == "-..."){
                answer += "b";
            }
            else if(a[i] == "-.-."){
                answer += "c";
            }
            else if(a[i] == "-.."){
                answer += "d";
            }
            else if(a[i] == "."){
                answer += "e";
            }
            else if(a[i] == "..-."){
                answer += "f";
            }
            else if(a[i] == "--."){
                answer += "g";
            }
            else if(a[i] == "...."){
                answer += "h";
            }
            else if(a[i] == ".."){
                answer += "i";
            }
            else if(a[i] == ".---"){
                answer += "j";
            }
            else if(a[i] == "-.-"){
                answer += "k";
            }
            else if(a[i] == ".-.."){
                answer += "l";
            }
            else if(a[i] == "--"){
                answer += "m";
            }
            else if(a[i] == "-."){
                answer += "n";
            }
            else if(a[i] == "---"){
                answer += "o";
            }
            else if(a[i] == ".--."){
                answer += "p";
            }
            else if(a[i] == "--.-"){
                answer += "q";
            }
            else if(a[i] == ".-."){
                answer += "r";
            }
            else if(a[i] == "..."){
                answer += "s";
            }
            else if(a[i] == "-"){
                answer += "t";
            }
            else if(a[i] == "..-"){
                answer += "u";
            }
            else if(a[i] == "...-"){
                answer += "v";
            }
            else if(a[i] == ".--"){
                answer += "w";
            }
            else if(a[i] == "-..-"){
                answer += "x";
            }
            else if(a[i] == "-.--"){
                answer += "y";
            }
            else if(a[i] == "--.."){
                answer += "z";
            }

        }
    return answer;
}

 

8-2. reduce

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'
}

function solution(letter) {
    return letter.split(' ').reduce((prev, curr) => prev + morse[curr], '')
}

아 map 돌리고 join 하는 것보다 아예 reduce로 시작하는거 더 나았을지도