Lv1. 숫자 문자열과 영단어

정현승·2025년 1월 5일

문제

https://school.programmers.co.kr/learn/courses/30/lessons/81301
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

정답 코드

function solution(s) {
  const numbers = {
    0: "zero",
    1: "one",
    2: "two",
    3: "three",
    4: "four",
    5: "five",
    6: "six",
    7: "seven",
    8: "eight",
    9: "nine",
  };
  let word = "";
  let result = "";
  for (let i = 0; i < s.length; i++) {
    word += s[i];
    if (!isNaN(Number(word))) {
      result += word;
      word = "";
    } else {
      for (key in numbers) {
        if (word === numbers[key]) {
          result += key;
          word = "";
          break;
        }
      }
    }
  }

  return Number(result);
}

//"one4seveneight"	1478

해설

  1. 영단어 표를 객체로 선언해줍니다.
  2. word = 객체에 단어가 포함되어있는지 확인하기 위함 result = 결과 반환용
  3. 매개변수로 받은 s를 반복하면서 word에 추가해줍니다.
  4. 추가한 후, 만약 word가 숫자라면 result에 추가하고 word를 초기화합니다.
    !isNaN(Number(word)) => 만약 숫자가 아닌 알파벳이라면 Number(word)가 NaN이므로 false
  5. 만약 알파벳이라면 word가 선언한 numbers 객체의 값(numbers[key])과 일치하는 것이 있는지 확인합니다.
  6. 일치하는 것이 있다면 result에 key를 추가합니다.
  7. 일치하는 것이 없다면 다시 반복문을 진행합니다.
  8. 반복문이 끝난 후 string 형태의 result를 숫자로 바꿔 반환합니다.

0개의 댓글