Lsiron

코딩테스트 4(reduce, filter, repeat, slice) 본문

코딩테스트/Java Script

코딩테스트 4(reduce, filter, repeat, slice)

Lsiron 2024. 5. 24. 02:31

문제 1. 없는 숫자 더하기.

 

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

 

풀이=해답.

 
function solution(numbers) {
  let arr =[];
  for(let i=0 ; i <= 9 ; i += 1){
      if(!numbers.includes(i)){
         arr.push(i)
      }
  }
  return arr.reduce((a,b) => a+b ,0)
}

 

=> 빈 배열 arr을 선언 해 준뒤, 0부터 9까지의 반복문을 통해, i 요소가 없다면 arr에 추가를 하여, reduce() 함수로 더해주었다.

 

// 다른 풀이를 보니 0부터 9까지 더한 값 45에, numbers 배열을 reduce()함수를 통해 더한값을 빼주는 방식으로 푸는 방법도 있었다. 발상의 전환도 필요한 듯 하다.

 

문제 2. 나누어 떨어지는 숫자배열

 

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

 

풀이 = 해답.

 
function solution(arr, divisor) {
  const result = arr.filter(num => num % divisor === 0).sort((a, b) => a - b);
 
  return result.length > 0 ? result : [-1];
}

 

=> filter() 함수를 이용하여, 나누어 떨어지는 요소만 남기도록 한 뒤, sort() 함수를 통해 오름차순으로 바꿔주었다. 이 후, result 배열의 length가 0이라는 것은 요소가 하나도 없다는 의미 이므로, 삼항연산자를 통해 -1을 추출할 수 있도록 했다.

 

// filter 말고도 map 그리고 for 반복문을 통해 배열은 추출할 수 있었다. 여기서 핵심은 배열에 아무 요소도 없을 경우, -1을 어떻게 반환하냐는 것 이었다.

 

문제 3. 핸드폰 번호 가리기

 

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

 

풀이.

function solution(phone_number) {
  let aft = phone_number.substr(phone_number.length-4, phone_number.length)
  let sum = "";
  for(let i = 0 ; i < phone_number.length-4 ; i += 1) {
      if(phone_number[i]) {
          sum += "*"
      }
  }
  return sum + aft
}

 

해답.

function solution(phone_number){
  let result = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
  return result;
}

 

=>  먼저 substr() 함수를 통해 뒷 네자리부터 추출했다. 그리곤 for 반복문을 통해 나머지 자리를 추출하여 *을 sum 변수에 삽입하였다. 이 후, sum + aft 를 통해 두 변수를 합쳐주었다.

 

// repeat() 함수의 존재와 slice()함수가 음수도 지원한다는 사실을 까맣게 잊고있었다.. 내장함수가 떠오르지 않다보니 1차원적으로 생각하게 되었고 결국엔 복잡한 코드를 만들어내고 말았다. 또한 substr은 현대에서 잘 쓰지 않고 substring과 slice를 자주 쓰는데 특히 slice를 쓴다고 한다. 잘 참조하도록 하자!

 

하루 총평.

점점 써야하는 내장함수의 종류가 늘어나는 것 같다. 또한 난이도가 점점 높아짐을 어느정도 체감 하고있다.

머릿속으로 그리는 연습을 더 많이 해야할 것 같다. 문제를 풀다가 막힌다 싶으면 손이 먼저 나가는 버릇이 다시 생기는 듯 하다. 막히면 처음으로 다시 돌아가는게 최선인 듯 하다.