꾸준하게
[JS코테] 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어 본문
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1478 → "one4seveneight"234567 → "23four5six7"10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
[나의 풀이1 - 리팩토링 전]
function solution(s) {
const numStr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
let answer = s;
for(i=0;i<s.length;i++){
if(isNaN(s[i])){
if(numStr.includes(s.slice(i,i+3))){
answer = answer.replace(s.slice(i,i+3),numStr.indexOf(s.slice(i,i+3)));
console.log(answer);
} else if(numStr.includes(s.slice(i,i+4))){
answer = answer.replace(s.slice(i,i+4),numStr.indexOf(s.slice(i,i+4)));
console.log(answer);
} else if(numStr.includes(s.slice(i,i+5))){
answer = answer.replace(s.slice(i,i+5),numStr.indexOf(s.slice(i,i+5)));
console.log(answer);
}
}
}
return parseInt(answer);
}
1) 배열numStr에 각 숫자에 대응되는 영단어 넣음
2) for문으로 index0부터 반복
3) s[i]가 문자일 때
4) index i부터 i+3까지(세 글자)가 numStr에 있는 문자일 때
5) answer의 그 문자를 numStr의 그 문자의 index로 바꿔줌
6) 4글자, 5글자도 반복
[나의 풀이2 - 리팩토링 후]
function solution(s) {
const numStr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
let answer = s;
const strToNum = (i,n) => {
let sliceNum = s.slice(i,i+n);
if(numStr.includes(sliceNum)){
answer = answer.replace(sliceNum,numStr.indexOf(sliceNum));
}
}
for(i=0;i<s.length;i++){
if(isNaN(s[i])){
strToNum(i,3);
strToNum(i,4);
strToNum(i,5);
}
}
return parseInt(answer);
}
1) 3글자, 4글자, 5글자일 때의 식이 반복되므로 함수strToNum으로 묶음
2) 그 함수에서 반복되는 s.slice(i,i+n)을 변수로 선언함
[다른풀이]
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);
}
1) for문으로 문자열s에서 반복하는게 아니라 numbers의 index를 반복함
2) numbers[i]를 기준으로 문자열을 나눠서 배열로 변환함
3) 그 배열을 합치면서 그 사이에 숫자i를 넣음
728x90
반응형
'JS코딩테스트' 카테고리의 다른 글
[JS코테] 정렬 - K번째수 (0) | 2023.05.31 |
---|---|
[JS코테] 문자열 내 마음대로 정렬하기 - 다른풀이공부하기 (0) | 2023.05.26 |
[JS코테] 크기가 작은 부분 문자열 (0) | 2023.05.16 |
[JS코테] 2018 KAKAO BLIND RECRUITMENT[1차] - 비밀지도 (0) | 2023.05.12 |
[JS코테] 완전탐색 - 최소직사각형 (0) | 2023.05.11 |