[JavaScript] 프로그래머스 피자 나눠 먹기 1, 2, 3

Gaeun·2022년 10월 26일
0
post-custom-banner

피자 나눠 먹기 (1)

문제 설명
머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

나의 풀이

Lv.0이다보니 간단하게 생각하려 했고, 1-7명까지는 1판, 8-14명까지는 2판, 15-21명까지는 3판으로이기 때문에 n을 7로 나눈 뒤 올림하는 방법을 생각했다.

function solution(n) {
  return Math.ceil(n / 7)
}

다른 사람의 풀이

const solution = (n) => Math.ceil(n / 7)

나의 풀이와 같은 방법이지만 ES6를 활용하여 작성되었다. 나에게는 아직까지는 ES6를 쓰는 것이 익숙하지 않지만 나도 이렇게 코드를 작성해보려고 노력해야겠다.

피자 나눠 먹기 (2)

문제 설명
머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

나의 풀이

  1. 1명부터 10명까지 경우의 수를 정리해보았다.
    1명 - 1판 / 2명 - 1판 / 3명 - 1판 / 4명 - 3판 / 5명 - 5판 / 6명 - 1판 / 7명 - 7판 / 8명 - 3판 / 9명 - 2판 / 10명 - 3판
  2. result는 n을 n과 6의 최대 공약수로 나눈 것과 같다는 것을 알게 되었다.
    ex1) 10(명)과 6(조각)의 최대 공약수: 2 -> 10 / 2 = 5(판)
    ex2) 4(명)와 6의 최대 공약수: 2 -> 4 / 2 = 2(판)
  3. 최대 공약수 코드는 내가 전에 작성한 포스트를 보고 작성했다.
const gcd = (a, b) => (a % b === 0 ? b : gcd(b, a % b))
const solution = (n) => n / gcd(n, 6)

처음 코드를 작성할 때에는 n이 6보다 작은 경우, 큰 경우를 나누어서 작성하였는데 코드가 너무 길어지고 자꾸 NaN을 반환하여 그냥 두 경우 모두 한 코드로 묶어서 실행해보았는데 테스트를 통과하였다. 또한 ES6로 작성하는 것을 익히기 위해 ES6 화살표 함수를 사용하여 작성해보았다.

다른 사람의 풀이

function solution(n) {
  const getLCM = (a, b) => {
    let lcm = 1;
    while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1;
    return lcm;
  };

  return getLCM(n, 6) / 6;
}

나는 최대 공약수를 구해 n최대 공배수로 나눈 반면, 이 풀이에서는 최소 공배수6으로 나누었다.

최소 공배수를 구하는 코드도 눈에 익혀두어야겠다고 했고, while문을 사용해본 적이 없어 순간 이게 어떤 문이었는지 생각하였다. 이와 관련해서 다음에 한번 정리해보아야겠다.

피자 나눠 먹기 (3)

문제 설명
머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

나의 풀이

피자 나눠 먹기 (1)에서는 모든 사람이 7조각의 피자를 가지고 한 조각 이상 먹기 위한 피자의 수를 구하였고, 피자 나눠 먹기 (2)에서는 6조각의 피자를 가지고 같은 수의 피자의 조각을 먹기 위한 피자의 수를 구하였다. 이 문제는 (2)보다는 (1)에 가깝다고 생각하고 풀었다.

const solution = (slice, n) => Math.ceil(n / slice)

가독성을 높이고 코드의 길이를 줄이기 위해 화살표 함수를 사용하였고 Math.ceil 함수를 사용하여 피자 나눠 먹기 (1)과 같이 풀었다. 피자 나눠 먹기 (2)에 비해 너무나도 쉬운 문제여서 당황했다. ... .

다른 사람의 풀이

function solution(slice, n) {
    return Math.ceil(n / slice)
}

같은 방식을 function 명령문으로 푼 풀이가 가장 많았다.

profile
🌱 새싹 개발자의 고군분투 코딩 일기
post-custom-banner

0개의 댓글