"나는 무엇을 풀었는가" 시리즈는 이렇게 시작했습니다.

  1. 취업 준비 중 몇 번의 코딩테스트를 보며 깨달은 것이 있습니다. 바로 "기초가 중요하다"는 것입니다. 그리하여 프로그래머스 Level.0부터 차근차근 다시 풀어보려고 합니다.
  2. 단지 문제를 푸는 것보단, 왜 해당 함수를 썼는지 더 재사용이나 가독성을 높일 방법은 없는지, 그리고 해당 함수가 없다면 어떻게 풀 수 있을지와 같이 다양한 방법과 생각을 통해 사고력을 높이려고 노력합니다.
  3. 그럼 레츠 고 !

💡 배운 내용


1. 자연수의 각 요소 → 배열 만들기

const n = 123;
return Array.from(String(n)).map(Number);
// [1,2,3]

2. 전달된 값이 정수인지 판별하는 메서드, Number.isInteger()

  • Number.isInteger()는 인수의 값이 정수인지 아닌지 판별하여 boolean 값으로 반환한다.
  • 전달된 값이 정수라면 true를 소수, NaN, Infinity와 같은 값은 모두 false를 반환한다.
Number.isInteger(0);        // true
Number.isInteger(-100);     // true
Number.isInteger(0.1);      // false
Number.isInteger("문자열");   // false
Number.isInteger(Infinity); // false
Number.isInteger(true);     // false

✏️ 풀이


1. [프로그래머스] 두 정수 사이의 합

문제설명 : 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.

입/출력 :

console.log(solution(3, 5, 12)) // 12

Solution1

  • a, b 중 큰 값을 s, 작은 값을 e로 둔다.
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;
}

Solution2 : Math.max & Math.min 활용하기

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;
}

2. [프로그래머스] 문자열 내 p와 y의 개수

문제설명 : s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요.

입/출력 :

console.log(solution("pPoooyY")); // true

Solution1

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;
}

3. [프로그래머스] 자릿수 더하기

문제설명 : 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.

입/출력 :

console.log(solution(123)); // 6

Solution1

function solution(n) {
  return Array.from(String(n))
    .map(Number)
    .reduce((a, b) => a + b);
}

4. [프로그래머스] 자연수 뒤집어 배열로 만들기

문제설명 : 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

입/출력 :

console.log(solution(12345)); // [(5, 4, 3, 2, 1)]

Solution1

function solution(n) {
  return Array.from(String(n)).map(Number).reverse();
}

5. [프로그래머스] x만큼 간격이 있는 n개의 숫자

문제설명 : 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴하세요.
입/출력 :

console.log(solution(2, 5)); // [2, 4, 6, 8, 10]

Solution1 : fill() & map() 활용하기

function solution(x, n) {
  return Array(n)
    .fill(x)
    .map((v, idx) => v * (idx + 1));
}

Solution2 : 고차함수가 없다면? for문으로 구현하기

function solution(x, n) {
  let arr = [];
  for (let i = 1; i <= n; i++) {
    arr.push(i * x);
  }
  return arr;
}

6. [프로그래머스] 나머지가 1이 되는 수 찾기

문제설명 : n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하세요.

입/출력 :

console.log(solution(10)); // 3

Solution1

function solution(n) {
  for (let i = 0; i <= n; i++) {
    if (n % i === 1) {
      return i;
    }
  }
}

7. [프로그래머스] 약수의 합

문제설명 : 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

입/출력 :

console.log(solution(12)); // 28

Solution1

function solution(n) {
    let answer = 0; 
    for (let i = 0; i <=n ; i++) {
        if (n % i === 0) {
            answer += i;
        }
    }
    return answer;
}

8. [프로그래머스] 음양 더하기

문제설명 : 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

입/출력 :

console.log(solution([4, 7, 12], [true, false, true])); // 9

Solution1 : 고차함수(map, reduce) 활용하기

function solution(absolutes, signs) {
  const answer = signs.map((v, i) => (v ? +absolutes[i] : -absolutes[i]));
  return answer.reduce((a, b) => a + b);
}

Solution2 : map 직접 구현하기

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);
}

9. [프로그래머스] 정수 내림차순으로 배치하기

문제설명 : n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.

입/출력 :

console.log(solution(118372)); // 873211

Solution1

function solution(n) {
    return Number(Array.from(String(n)).sort((a, b) => b - a).join(''));
}

10. [프로그래머스] 정수 제곱근 판별

문제설명 : n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

입/출력 :

console.log(solution(121)); // 144

Solution1

function solution(n) {
  const num = Math.sqrt(n);
  return Number.isInteger(num) ? Math.pow(num + 1, 2) : -1;
}
profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글