728x90
반응형
🚨문제
https://programmers.co.kr/learn/courses/30/lessons/81301?language=javascript
🔅예제 이해
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
☺️나의 코드
정규식, split(), charAt(), .findIndex()
function solution(s) {
let engs = ["zero","one","two","three","four","five","six","seven","eight","nine"];
let str = s;
//단어가 되어 묶일 변수
let word = "";
//글자를 하나하나 검사한다.
for(var i = 0; i<s.split('').length; i++){
//문자 하나에 커서를 둔다
const alph = s.charAt(i);
//해당 문자가 소문자인 경우
if(/[a-z]/.test(alph)){
//단어에 해당 문자를 추가하고
word += alph;
//word가 engs에 있는 단어인지 확인한다.
var okWord = engs.findIndex((e) => {return e === word});
//만약 engs에 있는 단어인 경우 engs에 몇번째 index인지 가져온다.
//예를 들어 two가 있다면 이는 engs[2]기에 2 리턴
if(okWord >= 0){
//단어를 리턴받은 index로 치환한다.
str = str.replace(word, okWord);
//새로운 단어가 담겨야 하기에 word는 비워준다.
word = "";
}
}
}
//숫자형으로 리턴하기 위해 *1을 곱해준다.
var answer = str*1;
return answer;
}
❗️ 풀이 순서
- 숫자와 문자가 섞인 s를 한글자 한글자 검사한다.
s.charAt(i) : 문자열에서 index로 글자 선택
- 만약 문자인 경우 word에 한글자씩 담고, 해당 글자가 engs에 포함되어 있는지 확인한다.
engs.findIndex((e) => {return e === word}) : 참인 경우 배열의 index를 리턴한다.
- 만약 포함되어 있는 경우 해당 문자를 index로 바꾼다.
str.replace(word, okWord) : str문자열에서 word를 okWord로 바꾼다.
728x90
반응형