🆎 문제
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.숫자 영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine
🆎 입출력 예
s result "one4seveneight" 1478 "23four5six7" 234567 "2three45sixseven" 234567 "123" 123
입출력 예 #1
문제 예시와 같습니다.
입출력 예 #2
문제 예시와 같습니다.
입출력 예 #3
"three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.입출력 예 #4
s에는 영단어로 바뀐 부분이 없습니다.
매개변수로 주어질 s 는 문자와 숫자의 조합으로 이루어진 문자열이다.
즉, 여기서는 숫자도 문자열인것.
one 이면 1로 표현하고, two 이면 2로 표현하는..
그렇게 문제를 이해하기엔 어렵지 않았다.
어떻게 식으로 표현하냐가 문제지..ㅎ
function solution(s) {
//s = "one4seveneight"
//answer = 1478
// s만큼 돌면서 새 빈배열에 문자를 하나씩 넣어주고
// 그문자가 1과 같으면 1로 재할당. 그리고 다시 시작.
const numObj = {
'zero' : 0 ,'one' : 1 ,'two' :2,'three':3,
'four':4 ,'five':5,'six': 6,'seven':7,
'eight' : 8,'nine' : 9
}
let keys= Object.keys(numObj); // 'zero',,,
let answer = '';
let word = '';
for(let el of s){
//숫자문자열인 경우 : answer 에 넣는다.
if(!isNaN(el)){
answer += el
}else{
//문자열일 경우
word += el;; //'one','two'...
if(keys.includes(word)){
//numObj의 밸류값에 word 가 있으면 numObj의 키를 answer 에 집어넣는다.
answer += numObj[word]
word = ''
}
}
}
return Number(answer);
}
맨 처음에 numObj 객체를 '0' : 'zero' .. 이런식으로 키,밸류값을 뒤집어서 작성했었다. 이렇게 되면 나중에 values.includes(word)의 값이 있을 경우, answer 에 키를 넣어줘야 하는데 이게 생각보다? 복잡해서 numObj 객체를 바꾼 케이스이다.
그리고 그냥 숫자형이 아닌,
숫자문자열일때를 어떻게 구현해야할지 막막해서 구글링을 했는데
다른사람들은 !isNaN을 사용한것을 보고 힌트를 얻었다.
아직 쪼렙이다. 양치기로 조져보겠다. 화이팅!