프로그래머스 lv1 문제 풀이 : 숫자 문자열과 영단어 (카카오)

전영호·2021년 7월 29일
0

알고리즘

목록 보기
17/40

7월 29일 알고리즘 문제 풀이
프로그래머스 lv1 문제 풀이 : 숫자 문자열과 영단어

문제 설명

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

  • 1478 → "one4seveneight"
  • 234567 → "23four5six7"
  • 10203 → "1zerotwozero3"

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

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

숫자영단어
0zero
1one
2two
3three
4four
5five
6six
7seven
8eight
9nine

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력 예

sresult
"one4seveneight"1478
"23four5six7"234567
"2three45sixseven"234567
"123"123

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #2

  • 문제 예시와 같습니다.

입출력 예 #3

  • "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
  • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.

입출력 예 #4

  • s에는 영단어로 바뀐 부분이 없습니다.

제한시간 안내

  • 정확성 테스트 : 10초

내 풀이

function solution(s) {
  let result = "";
  // 숫자 판별 문자열 생성
  let number = "0123456789";
  // string으로 구성된 숫자를 임시 저장할 공간 생성
  let word = "";
  // 숫자 테이블 생성
  let numbers = {
    zero: "0",
    one: "1",
    two: "2",
    three: "3",
    four: "4",
    five: "5",
    six: "6",
    seven: "7",
    eight: "8",
    nine: "9",
  };

  // s의 길이만큼 반복
  for (let i = 0; i < s.length; i++) {
    // 해당 인덱스가 숫자라면
    if (number.includes(s[i]) === true) {
      // 최종 출력할 문자열에 이어붙여준다.
      result = result + s[i];
    } else {
      // 아니라면 임시 저장 공간에 문자를 차례로 저장한다.
      word = word + s[i];
      // 혹시 문자가 숫자 테이블 객체에 저장되어 있다면
      // 최종 출력 문자열에 이어붙여 준뒤 임시 저장공간을 초기화한다.
      if (numbers[word] !== undefined) {
        result = result + numbers[word];
        word = "";
      }
    }
  }

  // 숫자로 바꾸어 최종 출력한다.
  return Number(result);
}
profile
인생 1회차 주니어 개발자

0개의 댓글