자바스크립트 코딩테스트 연습 1일차

Y·2020년 7월 28일
3

단 한번도 자바스크립트로 코테연습을 해볼생각을 안해봤다. 파이썬으로만 코테풀다가 , 자바스크립트 공부도 할겸 , 혼자 정리할겸 .. document만 읽기보단 직접 사용하면서 배우는게 가장 빠를 것 같다는 생각에 포스팅해보려한다.

문제 1


내 풀이


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.prototypereplace() 메서드를 이용한 풀이다.
replace()메서드는 첫번째 인자로 정규표현식 또는 문자열을 받고, 두번 째 인자로는 대체시킬 문자열 또는 함수를 받는다. 정규표현식을 인자로 받을 경우, 해당하는 모든 문자열을 대체시키고, 문자열을 인자로 받을 경우 매치되는 첫번째 문자열만 대체한다.

문제 2


내 풀이


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() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
profile
연세대학교 산업공학과 웹개발 JavaScript

2개의 댓글

comment-user-thumbnail
2020년 12월 8일

안녕하세요, 핸드폰번호만드는 함수에서 깜짝 놀랐습니다. 추천 풀이가 깔끔하네요 ㅎㅎ 혹시 연습하시는 사이트가 어딘지 알 수 있을까요?

1개의 답글