"나는 무엇을 풀었는가" 시리즈는 이렇게 시작했습니다.
- 취업 준비 중 몇 번의 코딩테스트를 보며 깨달은 것이 있습니다. 바로 "기초가 중요하다"는 것입니다. 그리하여 프로그래머스 Level.0부터 차근차근 다시 풀어보려고 합니다.
- 단지 문제를 푸는 것보단, 왜 해당 함수를 썼는지 더 재사용이나 가독성을 높일 방법은 없는지, 그리고 해당 함수가 없다면 어떻게 풀 수 있을지와 같이 다양한 방법과 생각을 통해 사고력을 높이려고 노력합니다.
- 그럼 레츠 고 !
const n = 123;
return Array.from(String(n)).map(Number);
// [1,2,3]
Number.isInteger(0); // true
Number.isInteger(-100); // true
Number.isInteger(0.1); // false
Number.isInteger("문자열"); // false
Number.isInteger(Infinity); // false
Number.isInteger(true); // false
문제설명 : 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
입/출력 :
console.log(solution(3, 5, 12)) // 12
function solution(a, b) {
let result = 0;
let s = a;
let e = b;
if (a > b) {
s = e;
e = a;
}
for (let i = s; i <= e; i++) {
result += i;
}
return result;
}
function solution(a, b) {
let result = 0;
let s = Math.min(a, b);
let e = Math.max(a, b);
for (let i = s; i <= e; i++) {
result += i;
}
return result;
}
문제설명 : s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요.
입/출력 :
console.log(solution("pPoooyY")); // true
function solution(s) {
const isP = [...s].filter((x) => x === "p" || x === "P");
const isY = [...s].filter((x) => x === "y" || x === "Y");
return isP.length === isY.length ? true : false;
}
문제설명 : 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
입/출력 :
console.log(solution(123)); // 6
function solution(n) {
return Array.from(String(n))
.map(Number)
.reduce((a, b) => a + b);
}
문제설명 : 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
입/출력 :
console.log(solution(12345)); // [(5, 4, 3, 2, 1)]
function solution(n) {
return Array.from(String(n)).map(Number).reverse();
}
문제설명 : 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴하세요.
입/출력 :
console.log(solution(2, 5)); // [2, 4, 6, 8, 10]
function solution(x, n) {
return Array(n)
.fill(x)
.map((v, idx) => v * (idx + 1));
}
function solution(x, n) {
let arr = [];
for (let i = 1; i <= n; i++) {
arr.push(i * x);
}
return arr;
}
문제설명 : n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하세요.
입/출력 :
console.log(solution(10)); // 3
function solution(n) {
for (let i = 0; i <= n; i++) {
if (n % i === 1) {
return i;
}
}
}
문제설명 : 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
입/출력 :
console.log(solution(12)); // 28
function solution(n) {
let answer = 0;
for (let i = 0; i <=n ; i++) {
if (n % i === 0) {
answer += i;
}
}
return answer;
}
문제설명 : 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
입/출력 :
console.log(solution([4, 7, 12], [true, false, true])); // 9
function solution(absolutes, signs) {
const answer = signs.map((v, i) => (v ? +absolutes[i] : -absolutes[i]));
return answer.reduce((a, b) => a + b);
}
function zip(a, b) {
const result = [];
const length = Math.min(a.length, b.length);
for (let i = 0; i < length; i++) {
result.push([a[i], b[i]]);
}
return result;
}
function solution(absolutes, signs) {
const answer = zip(absolutes, signs).map(([a, s]) => s ? +a : -a);
return answer.reduce((a, b) => a + b);
}
문제설명 : n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.
입/출력 :
console.log(solution(118372)); // 873211
function solution(n) {
return Number(Array.from(String(n)).sort((a, b) => b - a).join(''));
}
문제설명 : n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
입/출력 :
console.log(solution(121)); // 144
function solution(n) {
const num = Math.sqrt(n);
return Number.isInteger(num) ? Math.pow(num + 1, 2) : -1;
}