코딩테스트 12

[코딩테스트] 약수의 개수와 덧셈

문제 두 정수 left와 right가 매개변수로 주어집니다. left 부터 right 까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 해결 function solution (left, right) { const arr = [] return Array .from({length : (right - left) + 1}, (_, i) => left + i) .map((item, i) => { const length = [] arr.push(item) for (let i = 0; i cur % 2 ? acc - arr[i] : acc + arr[i], 0) } 다른 사람의 풀이를 보니 굉장히 어렵게 푼 것 ..

코딩테스트 2023.12.22

[코딩테스트] 수박수박수박수박수박수?

문제 길이가 n이고, "수박수박수박수...." 와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 해결 const solution = (n) => Array .from({length: n}, (_, i) => i % 2 ? '박' : '수') .join("") 배열을 n의 길이만큼 만들고 홀수일 경우 '박' , 짝수일 경우 '수' 를 붙이게 하였다. 그러고 join 메서드로 배열을 합쳐주니 해결되었다. join에서 , 쉼표도 함께 나오는 문제가 있었다. 안에 "" 큰따옴표를 붙여주니 사라졌다. 다른 사람의 풀이 var waterMelon = n =>'수박'.repeat(n/2) + (n%2 =..

코딩테스트 2023.12.15

[코딩테스트] 가운데 글자 가져오기

문제 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어보세요. 단어의 길이가 짝수라면 가운데 두 글자를 반환하면 됩니다. 해결 function solution (s) { const i = s.length / 2 return s.length % 2 === 0 ? s.slice(i-1, i+1) : s.substring(Math.floor(i), Math.ceil(i)) } s 의 length를 2로 나누어 몫이 0이 된다면 짝수이기 때문에 삼항연산자를 통해서 true일 경우 slice 인덱싱을 통해 2글자가 나오도록 +1, -1을 해주었고 false일 경우 length / 2는 소수점이 나오기 때문에 반내림 반올림을 통해 인덱싱을 해주었다. 다른 사람의 풀이 function solution..

코딩테스트 2023.12.14

[코딩테스트] 제일 작은 수 제거하기

문제 정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr가 [4, 3, 2, 1]인 경우는 [4, 3, 2]만 리턴하고, [10]이면 [-1]을 리턴합니다. 해결 function solution (arr) { const target = Math.min(...arr) const answer = arr.filter((item) => item !== target) return answer == '' ? [-1] : answer } 처음에 sort와 slice로 인덱싱을 통해 가장 작은 수를 배출했는데 배열의 순서가 지켜지지 않아 오답이 났다. 찾아보니 Math.m..

코딩테스트 2023.12.13

[코딩테스트] 없는 숫자 더하기

문제 0부터 9까지의 숫자 중 일부가 들어있는 정부 배열 numbers가 매개변수로 주어집니다. numbers 에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 해결 function solution (number) { let answer = 0 for (let i = 0; i el === i)) { console.log(i); answer += i; } } return answer; } 처음에 answer 변수 선언을 const로 했더니 answer += i 하는 코드에서 오류가 났다. let으로 바꿔주니까 됐다! const로 하면 재정의가 안돼서 += 연산자가 안먹..

코딩테스트 2023.12.12

[코딩테스트] 핸드폰 번호 가리기

문제 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 해결 function solution (phone_number) { return phone_number .slice(0, -4) .replace(/[0-9]/g,"*") + phone_number .substring(phone_number.length - 4) } slice로 뒤 4번째 인덱스 전까지 문자열을 자른다. replace로 숫자를 모두 *로 치환한다. 그리고 substring으로 length - 4를 하면 뒤의 4자리..

코딩테스트 2023.12.07

[코딩테스트] 두 정수 사이의 합

문제 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어, a = 3, b = 5인 경우, 3 + 4 + 5 = 12 이므로 12를 리턴합니다. 해결 const solution = (a, b) => { const arr = [a, b].sort((a, b) => a - b) return Array .from({length: Math.abs(a-b)+1}, (_, i) => i + arr[0]) .reduce((a, b) => a + b) } 배열을 만들고 sort 메서드를 통해 낮은 수를 골랐다. 그리고 Array 로 a와 b의 뺀 값에서 음수를 제외하고 + 1을 해주면 두 사의의 길이가 나온다. 그곳에 아까 sort 메서드로 ..

코딩테스트 2023.12.04

[코딩테스트] 콜라츠 추측

문제 1937년 collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 예를 들어, 주어진 수가 6이라면 6 => 3 => 10 => 5 => 16 => 8 => 4 => 2 => 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 -1을 반환해주세요. 해결 c..

코딩테스트 2023.11.30

[코딩테스트] 하샤드 수

문제 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9 이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 해결 function solution (x) { const answer = (x+'') .split('') .map((e) => e*1) .reduce((_, e) => _ + e); return x % answer === 0 ? true : false; } 우선 x+''으로 문자 형변환을 해준 뒤 split을 통해 배열로 만들었다. 그러고 map을 통해 *1을 해서 숫자 형변환을 하고 reduce로 배열의 전체 합을 구했다..

코딩테스트 2023.11.24

[프로그래머스 코딩테스트] 자연수 뒤집어 배열로 만들기

1. 문제 자연수 n 을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345면 [5, 4, 3, 2, 1]을 리턴합니다. 2. 풀이 const solution = (n) => Array .from ({length : String(n).length}, (_, i) => i) .sort((a, b) => b - a) .map((value) => Number(String(n)[value])) Array.from을 사용해서 n의 길이만큼 인덱스가 나열된 배열을 하나 뽑은 다음 내림차순으로 정렬했다. 그리고 map 함수로 n을 문자열로 바꿔 인덱싱을 가능하게 해주었고 위 배열을 인덱스 값에 넣어 마지막 순서대로 배열이 나오게 만들었다. 3. 해설 function solutio..

코딩테스트 2023.11.17