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

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

이번주는 30 + @ 문제를 풀어 下下편까지 이어갑니다 😇


✏️ 풀이


1. [프로그래머스] 제일 작은 수 제거하기

문제설명 : 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요.

입/출력 :

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

Solution1

function solution(arr) {
  const minN = Math.min(...arr);
  const deleteMin = arr.filter(v => v !== minN);
  return deleteMin.length > 0 ? deleteMin : [-1];
}

2. [프로그래머스] 문자열 내림차순으로 배치하기

문제설명 : 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.

입/출력 :

console.log(solution("Zbcdefg")); // "gfedcbZ"

Solution1

function solution(s) {
  return [...s].sort().reverse().join("");
}

3. [프로그래머스] 문자열 다루기 기본

문제설명 : 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.

입/출력 :

console.log(solution("a234")); // false

Solution1

function solution(s) {
  if (s.length !== 4 && s.length !== 6) {
    return false;
  }

  const isNum = [...s].map(Number).filter((v) => v >= 0); // 숫자만 남김

  return s.length === isNum.length;
}

4. [프로그래머스] 부족한 금액 계산하기

문제설명 : 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.

입/출력 :

console.log(solution(3, 20, 4)); // 10

Solution1

function solution(price, money, count) {
  let answer = 0;

  for (let i = 0; i < count; i++) {
    answer += price * (i + 1);
  }

  return money >= answer ? 0 : answer - money;
}

5. [프로그래머스] 약수의 개수와 덧셈

문제설명 : left ~ right까지의 수 중 약수의 개수가 짝수라면 +, 홀수라면 - 한 수를 리턴하세요.

입/출력 :

console.log(solution(13, 17)); // 43 

Solution1

function isEven(n) {
    return n % 2 === 0;
}

function countDivisor(n) {
    let temp = [];
    for (let i = 0; i <= n; i++) {
        if (n % i === 0) {
            temp.push(i)
        }
    }
    return temp;
}

function solution(left, right) {
    let answer = 0;
    for (let i = left; i <= right; i++) {
        if (isEven(countDivisor(i).length)) {
            answer += i;
        } else {
            answer -= i;
        }
    }
    return answer;
}

6. [프로그래머스] 최대공약수와 최소공배수

문제설명 : 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요.

입/출력 :

console.log(solution(3, 12)); // [3, 12]

Solution1 : 재귀함수로 구현

function solution(a, b) {
  const gcd = (a, b) => (a % b === 0 ? b : gcd(b, a % b));
  const lcm = (a, b) => (a * b) / gcd(a, b);
  return [gcd(a, b), lcm(a, b)];
}

7. [프로그래머스] 행렬의 덧셈

문제설명 : 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

입/출력 :

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

Solution1 : 고차함수로 구현

function solution(arr1, arr2) {
  return arr1.map((arr, aIndex) =>
    arr.map((n, bIndex) => n + arr2[aIndex][bIndex])
  );
}

Solution2 : 고차함수 → 2중 for문으로 구현

function solution(arr1, arr2) {
    const answer = [];

    for (let i = 0; i < arr1.length; i++) {
        const temp = [];

        for (let j = 0; j < arr1[i].length; j++) {
            temp.push(arr1[i][j] + arr2[i][j]);
        }

        answer.push(temp);
    }

    return answer;
}

8. [프로그래머스] 3진법 뒤집기

문제설명 : n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

입/출력 :

console.log(solution(45)); // 7

Solution1

function solution(n) {
  const a = [...n.toString(3)].reverse().join("");
  return parseInt(a, 3);
}

9. [프로그래머스] 예산

문제설명 : 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요

입/출력 :

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

Solution1

function solution(d, budget) {
  const sorted = d.sort((a, b) => a - b);
  let cnt = 0;

  for (let i = 0; i < sorted.length; i++) {
    budget -= sorted[i];

    if (budget < 0) {
      break;
    }
    cnt++;
  }

  return cnt;
}

10. [프로그래머스] 크기가 작은 부분문자열

문제설명 : t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요

입/출력 :

console.log(solution("3141592", "271")); // 2

Solution1

function solution(t, p) {
    let cnt = 0;
    
    for(let i = 0; i < t.length - p.length; i++) {
      const temp = t.slice(i, p.length + i);
      if (temp <= p) {
        cnt++;
      }
    }
  
  return cnt;
}
profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글