알고리즘 테스트

프로그래머스-javascript) lv0 외계행성의 나이

Ella Seon 2022. 11. 26. 14:25

 

1. 문제 설명

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

입출력 예

 

 

2.  첫번째 정답코드

 

🔸배우고 싶은 코드

function solution(age) {
    let str = 'abcdefghij'//1) a-j까지 하나의 문자열에 담음
    return Array.from(age.toString()).map(t => str[+t]).join('');
//+'2' 결과 값 2   t에다가 +를 붙이면 문자열이 숫자로 변함
}

🔸나에게 쉬운 코드

function solution(age){
  let answer = '';
  const stringAge = String(age); //나이를 문자열로 바꾸기

  for(let i = 0;i<stringAge.length;i++){
    stringAge[i]; //0번째 숫자, 1번째 숫자 들어올자리 마련
    if(stringAge[i]==="0"){
      answer = answer + "a"
    }
    if(stringAge[i]==="1"){
      answer = answer+"b"
    }
    if(stringAge[i]==="2"){
      answer = answer+"c"
    }
    if(stringAge[i]==="3"){
      answer = answer+"d"
    }
    if(stringAge[i]==="4"){
      answer = answer+"e"
    }
    if(stringAge[i]==="5"){
      answer = answer+"f"
    }
    if(stringAge[i]==="6"){
      answer = answer+"g"
    }
    if(stringAge[i]==="7"){
      answer = answer+"h"
    }
    if(stringAge[i]==="8"){
      answer = answer+"i"
    }
    if(stringAge[i]==="9"){
      answer = answer+"j"
    }
  }
  return answer
}
function solution(age) {
    let 알파벳 = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
    let answer = "";
    age = age.toString();

    for(let i=0; i<age.length; i++){
        answer += 알파벳[age[i]];
    }
    return answer;
}

 

알고리즘 스터디때 물어볼질문 : 대체 ...나이를 문자열로 바꾼다는 생각을 어떻게 하는거지?

 

2-1) 정답코드 메서드 설명

2-1-1)   Array.from()

Array.from 은 반복 가능한 객체 또는 유사배열 객체를 복사해 새로운 객체 배열을 반환한다.

const arr = [1,2,3,4,5];
const newArr = Array.from(arr);

console.log(arr);
console.log(newArr);

from()은 두번째 인자에 선택적으로 매핑할 함수를 지정할 수 있음. 이 경우 주어진 배열을 복사할때 각각의 요소에 지정된 함수를 실행하고, 그 결과를 배열로 반환한다.

const arr = [1,2,3,4,5];

function plusTwo(number){
  return number +2;
}

const newArr = Array.from(arr,plusTwo);

console.log(arr); //[1, 2, 3, 4, 5]
console.log(newArr);//[3, 4, 5, 6, 7]

2-1-2) 숫자를 문자열로 변환하는 메서드 toString(), String()

const num = 5;

const str1 = num.toString();
const str2 = (100).toString();
const str3 = (-10.11).toString();

console.log(typeof(str1))
console.log(typeof(str2))
console.log(typeof(str3))
const num = 5;

const str1 = String(num);
const str2 = String(100);
const str3 = String(-10.11);

console.log(typeof(str1))
console.log(typeof(str2))
console.log(typeof(str3))

 

2-1-3)  join()

배열의 모든 요소들을 연결한 하나의 문자열을 반환한다.

 

join() 안 매개변수로는 배열의 각 요소를 구분할 문자열을 지정한다. 생략하면 배열의 요소들이 쉼표로 구분된다.

빈 문자열이면 모든 요소들 사이에 아무 문자도 없이 연결된다. 

const elements = ['Fire', 'Air', 'Water'];

console.log(elements.join());
// expected output: "Fire,Air,Water"

console.log(elements.join(''));
// expected output: "FireAirWater"

console.log(elements.join('-'));
// expected output: "Fire-Air-Water"