네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
s | result |
---|---|
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
function solution(s) {
var answer = 0;
s = s.replaceAll('zero', '0')
s = s.replaceAll('one', '1')
s = s.replaceAll('two', '2')
s = s.replaceAll('three', '3')
s = s.replaceAll('four', '4')
s = s.replaceAll('five', '5')
s = s.replaceAll('six', '6')
s = s.replaceAll('seven', '7')
s = s.replaceAll('eight', '8')
s = s.replaceAll('nine', '9')
answer = parseInt(s);
return answer;
}
풀긴 풀었지만 이 문제는 남의 풀이가 너무 궁금해서 봤다가 감탄을 금치 못한 풀이가 하나 있었다..
Array
의 split 과 join 을 너무나도 잘 활용한 풀이라서 가져와본다.
function solution(s) {
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
var answer = s;
for(let i=0; i< numbers.length; i++) {
let arr = answer.split(numbers[i]);
answer = arr.join(i);
}
return Number(answer);
}
String
의 replaceAll
은 우리가 입력한 문자열을 원본 문자열에서 다 찾아내서 우리가 원하는 것으로 대체한 새로운 문자열을 반환해준다.Array
의 join
은 배열의 요소들을 concat하여 새로운 문자열을 반환해주는데, 우리가 입력한 파라미터를 각 배열 요소 사이사이에 끼어서 붙여준다.