네오와 프로도가 숫자놀이를 하고 있습니다.
네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면
프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
▪ 1478 → "one4seveneight"
▪ 234567 → "23four5six7"
▪ 10203 → "1zerotwozero3"
입출력 예
s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123
function solution(s) {
const srt = ["zero", "one" , "two", "three", "four", "five", "six", "seven", "eight", "nine"]
const num = [0, 1 , 2, 3, 4, 5, 6, 7, 8, 9]
srt.forEach((element, i) => {
s.includes(element)? s.replace(element, num[i]) : null;
});
return Number(s)
}
solution("one4seveneight")
- replace( )는 문자열을 변경하는것이 아니라 새로운 문자열을 반환하는것이다.
그렇기 때문에 앞에 선언부를 추가해야한다.- replace( ) 를 사용했기 때문에 삼항연산자가 필요하지않다
s 문자열에 포함되는지를 묻는 코드가 필요하지 않다.- replace( )를 사용하여 식별자로 문자열을 찾을 경우 new RegExp(element, 'g') 이렇게 사용해야 한다.
new RegExp( )는 정규표현식을 생성하는 구문이다.
function solution(s) {
const srt = ["zero", "one" , "two", "three", "four", "five", "six", "seven", "eight", "nine"]
const num = [0, 1 , 2, 3, 4, 5, 6, 7, 8, 9]
srt.forEach((element, i) => {
s = s.replace(new RegExp(element, 'g'), num[i])
});
return Number(s)
}
solution("one4seveneight")
function solution(s) {
const srt = {
"zero" : 0,
"one" : 1,
"two" : 2,
"three" : 3,
"four" : 4,
"five" : 5,
"six" : 6,
"seven" : 7,
"eight" : 8,
"nine" : 9
}
for (const key in srt) {
if (s.includes(key)) {
s = s.replace(new RegExp(key, 'g'), srt[key]);
}
}
return s
}
solution("one4seveneight")
내 생각에 는 객체로 푸는게 더 간단할거라고 생각했는데 배열이 더 간단한 것 같다
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);
}
나는 숫자를 하나 하나 써서 배열을 새로 만들었는데
for문의 i를 이용하는 방법이 있었다!!!!