외계행성의 나이

HS K·2023년 3월 13일

문제설명

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

제한사항

  • age는 자연수입니다.
  • age ≤ 1,000
  • PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.

내가 쓴 답

function solution(age) {
    let str = String(age)
    let change = str.split("")
    let choice = {
        "0":"a",
        "1":"b",
        "2":"c",
        "3":"d",
        "4":"e",
        "5":"f",
        "6":"g",
        "7":"h",
        "8":"i",
        "9":"j"
    }
    
    let convert = [choice.change[0], choice.change[1]]
    return convert
}

※ 참고로 틀린 답이다. 어디가 틀렸을까?

  1. choice.change[0]에서 객체의 접근 방법이 잘못 되었다.

객체에서 속성에 접근할 때는 . 또는 [ ]를 사용한다. .은 속성 이름이 유효한 식별자(identifier)인 경우에만 사용할 수 있고, [ ]는 모든 식별자와 문자열, 숫자, 심볼 등을 속성 이름으로 사용할 수 있다.

따라서 choice.change[0]은 choice 객체에서 change 속성을 찾고, 이 속성의 값에 대해 [0] 연산자를 적용하는 코드가 되어버린다.

반면에 choice[change[0]]은 change 배열의 첫 번째 요소를 choice 객체의 속성 이름으로 사용하여 해당 속성의 값을 가져오는 것이다.

  1. [choice.change[0], choice.change[1]]
    입출력 예시만보고 [0],[1]만 접근했는데, 배열의 길이만큼 choice 객체에 접근을 해줘야한다.

수정한 답

function solution(age) {
    let str = String(age)
    let change = str.split("")
    let choice = {
        "0":"a",
        "1":"b",
        "2":"c",
        "3":"d",
        "4":"e",
        "5":"f",
        "6":"g",
        "7":"h",
        "8":"i",
        "9":"j"
    }
    let arr = [];
    for (i=0; i<change.length; i++) {
        arr.push(choice[change[i]])
    }

    return arr.join("")
}

여러종류의 풀이 보기

function solution(age) {
  return age
    .toString()
    .split("")
    .map((v) => "abcdefghij"[v])
    .join("");
}

후기

오랜만에 객체에 대한 개념을 정리할 수 있었다.

profile
주의사항 : 최대한 정확하게 작성하려고 하지만, 틀릴내용이 있을 수도 있으니 유의!

0개의 댓글