단 한번도 자바스크립트로 코테연습을 해볼생각을 안해봤다. 파이썬으로만 코테풀다가 , 자바스크립트 공부도 할겸 , 혼자 정리할겸 .. document만 읽기보단 직접 사용하면서 배우는게 가장 빠를 것 같다는 생각에 포스팅해보려한다.
function createPhoneNumber(numbers){
const answer = numbers.reduce((acc,cur,idx,arr)=> {
if(idx === 3){
acc = acc + ") "
return acc + cur;
}
else if(idx ===6){
acc = acc + "-"
return acc + cur;
}
else {
return acc+ cur;
}
},'(')
return answer
}
아직 자바스크립트의 여러 메서드들이 머릿속에 있지않아서 그런지 돌아서 돌아서 푼것 같다..
그냥 reduce를 통해서 배열을 한번씩 돌려주면서 문자열로 합칠생각을 했다. 배열에 없는 ()
, -
같은 문자열은 시기에맞게 추가해주면 될것같아서 if
조건문으로 문자열 연산을 했다. 아주 비효율적인 코드인것같긴하지만, 일단 잘 돌아가니 우선은 만족했다..
function createPhoneNumber(numbers){
let format = "(xxx) xxx-xxxx"
for (let i=0;i < numbers.length;i++) {
format = format.replace("x",numbers[i]);
}
return format
}
String.prototype
의 replace()
메서드를 이용한 풀이다.
replace()
메서드는 첫번째 인자로 정규표현식 또는 문자열을 받고, 두번 째 인자로는 대체시킬 문자열 또는 함수를 받는다. 정규표현식을 인자로 받을 경우, 해당하는 모든 문자열을 대체시키고, 문자열을 인자로 받을 경우 매치되는 첫번째 문자열만 대체한다.
function persistence(num) {
let answer =0;
const gettingMult = function mult(number) {
answer++
let currentNum = 1;
for (let numb of String(number)) {
currentNum = currentNum * parseInt(numb)
}
if (String(currentNum).length === 1) {
return currentNum
} else {
return mult(currentNum)
}
}
if (num-10 <=0) {
return 0
}
gettingMult(num);
return answer;
}
인자로 받을 숫자를 문자열로 바꾸고, 반복문을 통해 각 자리의 숫자를 다시 숫자로 바꿔 곱해야겠다고 생각했다. 각 자리수의 곱을 리턴하는 내부함수 gettingMult
가 결과값이 한자리수가 나올때까지 재귀를 통해 계속 돌아가게끔 코딩했다. 뭔가 맘에안들지만 지금의 내 지식으론 거기까지였다.
function persistence(num) {
num = num.toString();
count=0;
while (num.length > 1) {
count++;
num = num.split('').map(Number).reduce((a,b) => a*b).toString();
};
return count;
}
아는만큼 코드가 간결해지는 것 같다. num을 toString()
을 통해 문자열로 바꿔주고, split('')
을 통해 각 자리수를 요소로 가지는 배열을 만들고, map()
을 통해 각 인자에 Number()
함수를 통해 다시 숫자로 바꾸고, reduce()
를 통해 각 자릿수의 곱을 반환하고, 이를 다시 toString()
을 통해 문자열로 바꾼다. 그리고 첫번쨰부터 다시 그 과정을 반복한다. 숫자의 각자릿수를 for문을 통해 각자릿수를 가지는 배열을 만드는 과정보다 map()
을 사용하면된다는 것을 알았다.
Array.prototype.map()
메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
안녕하세요, 핸드폰번호만드는 함수에서 깜짝 놀랐습니다. 추천 풀이가 깔끔하네요 ㅎㅎ 혹시 연습하시는 사이트가 어딘지 알 수 있을까요?