알고리즘: 숫자 문자열과 영단어

Kyoorim LEE·2023년 1월 5일
0

알고리즘TIL

목록 보기
38/40

문제 설명

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

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

  • 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

문제 풀이

  • 숫자를 영문 문자열로 나열한 arr를 만든다
  • split()을 써서 arr의 문자열을 기준으로 나눈다

    split()

const str = 'The quick brown fox jumps over the lazy dog.';

const words = str.split(' ');
console.log(words[3]);
// expected output: "fox"

const chars = str.split('');
console.log(chars[8]);
// expected output: "k"

const strCopy = str.split();
console.log(strCopy);
// expected output: Array ["The quick brown fox jumps over the lazy dog."]

만약 split()에 넘겨지는 인자가 문자열일 경우 그 문자열을 기준으로 나눠짐!

  • **join()을 써서 split으로 나눈 배열의 인자들을 하나로 묶어줌

    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"

배열의 element 사이에 join()에 넘겨지는 인자가 들어가면서 합쳐진다!!!


function solution(s) {
    let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
    var answer = s; // s="one4seveneight"

    for(let i = 0; i < numbers.length; i++) {
        let arr = answer.split(numbers[i]); // ["", "4seveneight"]
        answer = arr.join(i); 
      	// arr[0]과 arr[1]을 i 로 이어줌
      	// i = 1
      	// "14seveneight" ....
    }

    return Number(answer);
}
profile
oneThing

0개의 댓글