문제설명
숫자 및 영단어 참조
제한사항 / 입출력 예
입출력 예 설명
제한시간 안내
- 정확성 테스트 : 10초
이전 문제들에도 있었는지 모르겠지만 이 문제는 제한시간이 걸려있다..
문제를 읽으면서 풀이과정을 상상했을때
숫자와 영단어 배열을 만들어주고
각 배열을 for문을 사용해서 돌린다음 if문으로 비교해서 맞는 값끼리 replace(찾는문자열, 바꿀문자열)을 통해 변경할 예정이었다.
문제풀이
// let word = {
// '0' : 'zero',
// '1' : 'one',
// '2' : 'two',
// '3' : 'three',
// '4' : 'four',
// '5' : 'five',
// '6' : 'six',
// '7' : 'seven',
// '8' : 'eight',
// '9' : 'nine'
// }
function solution(s) {
var answer = 0;
let word = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
let num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
let ss = s.split('')
// console.log(ss)
for (let i = 0; i < 10; i++) {
// console.log(word[i])
// console.log(num[i])
if(sessionStorage === word[i]){
answer = s.replace(word[i], num[i])
}
}
return Number(answer)
}
solution("one4seveneight")
이런식으로 코드를 짜면서 콘솔을 찍어보니 s는 모든문자들이 붙어있어 스플릿을 해줘야겠다 생각하고 스플릿하고 결과를 봤는데
//입력 받은 s를 split('')으로 함
[
'o', 'n', 'e', '4',
's', 'e', 'v', 'e',
'n', 'e', 'i', 'g',
'h', 't'
]
이런식으로 한글자씩 따로 나와 이방법은 틀렸구나 직감을 했다
한다면 더 할 수 있겠지만..?
one 묶고,,, seven 묶고,,,,
너무 비효율적인 방법이다.. 이쯤 헬프를 외치며 고수님들의 풀이를 보기시작한다.
내가 생각한 for문 사용과 s의 스플릿 사용
어떻게 써야하나 몰랐는데 이분의 코드를 보며 이해할수있었다.
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]);
// console.log(arr) // 윗윗줄에 answer =s 해서 anwer 값은 입력값 // 입력밧을 돌면서 넘버스(영단어)가 있으면 스플릿해주라
// console.log(i) //0~9
answer = arr.join(i); //
// console.log(answer)
}
return Number(answer); // 출력값은 숫자니까 Nuber()사용
}
solution('onetwo3seven5six')
알고리즘 문제푼지 이제 5일차인데 지금 내수준을 영어로 비유하자면
말귀는 알아듣는데 내가 말을 못하는 수준인거 같다.
실제론 듣지도 못하지만
코드는 읽고 이해는 가능하나 내손으로 사용하는 수준이 되지 못한것을 매번느낀다..
더 쉬운 고수의 문제풀이
// 정규 표현식을 사용해서 s의 입력값에 해당 값이 포함하는지 확인하고 ,뒤에 숫자로 리턴해주는 방법
// 간단하다..
function solution(s) {
s = s.replace(/zero/gi, 0)
.replace(/one/gi, 1)
.replace(/two/gi, 2)
.replace(/three/gi, 3)
.replace(/four/gi, 4)
.replace(/five/gi, 5)
.replace(/six/gi, 6)
.replace(/seven/gi, 7)
.replace(/eight/gi, 8)
.replace(/nine/gi, 9)
return parseInt(s);
}