TIL
23.04.13 TIL
DDINYOUNG
2023. 4. 18. 16:11
입출력 예
s | result |
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
내가 작성한 코드
function solution(s) {
var answer = [];
let numList = ['zero','one','two','three','four','five','six','seven','eight','nine']
let vocab = ""
let str = s.split("")
for(let a of str){
if(isNaN(parseInt(a))){
vocab += a;
if(numList.includes(vocab) === true){
answer.push(numList.indexOf(vocab))
vocab = ""
}
} else {
answer.push(parseInt(a))
}
}
let newAnswer = ""
for(let b of answer){
newAnswer += b
}
return Number(newAnswer)
}
numList를 만들고 s를 split해서 배열로 만들고 해당 요소를 문자열인지 숫자인지 판단 후
숫자는 그냥 넣어주고 문자열은 vocab에 담아서 numList에 포함되는 문자열은 해당 인덱스를 문자열 대신 넣어준다.
이렇게 풀면 문제점…
문자열이 담긴 배열이라 다시 한번 풀어헤쳐서 배열→문자열→숫자로 변경해줘야 됨. 너무 복잡하다;;
다른 사람의 풀이 #1
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);
}
내가 푼 방법의 상위 버전인 것 같다. numbers의 요소로 split 해서 문자열을 쪼개준 다음 해당 인덱스로 넣어주고 join으로 다시 합쳐줌..
다른 사람의 풀이 #2
function solution(s) {
s = s.replace(/zero/g, 0)
.replace(/one/g, 1)
.replace(/two/g, 2)
.replace(/three/g, 3)
.replace(/four/g, 4)
.replace(/five/g, 5)
.replace(/six/g, 6)
.replace(/seven/g, 7)
.replace(/eight/g, 8)
.replace(/nine/g, 9)
return parseInt(s);
}
정규식으로 replace하기…
replace사용하는 것은 맨 처음에 생각하기는 했는데, split을 하자니 배열이 되서 replace를 못 사용하고 slice를 사용하자니 다시 붙이는게 번거로울것같았는데 replace 정규표현식이 있었다
정규식 뒤에 붙는 / /g는 대소문자를 구분하지 않는다는 의미이고
/ /gi는 대소문자도 구분한다.