본문 바로가기
코딩테스트/프로그래머스 0단계 - 입문

프로그래머스 0단계 - Day4 수학, 배열

by 학습하는 청년 2024. 3. 14.

피자 자눠 먹기(1)

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

  • 1 ≤ n ≤ 100
// 1.모든 사람이 한 조각 이상 먹는다
// 1-7명 : 1판, 8-14명 : 2판 ...
const solution = n => Math.ceil(n / 7);

// 다른 사람의 풀이
function solution(n) {
  let pizza = 7;
  let result = pizza;
  if(n > result) {
    for(let i = 0; i < (n / pizza) - 1; i++) {
      result += pizza;
    }
  };
  return answer = result / 7;
}

1) 한 판에 7조각인데, 모든 사람이 각각 1조각 이상 먹게 만들려면  한 판당 7명이 적절하다.

2) 따라서 1판이 있고, 8명이라면 2판이 존재해야 한다.

3) 즉, 7의 배수를 기점으로 +1판이 필요하다.

 

<다른 사람의 풀이에 대한 이해>

뭔가 지저분한 느낌이지만, 이렇게 계산식을 세우는 게 도움이 된다고 생각한다.


피자 나눠 먹기(2)

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

  • 1 ≤ n ≤ 100
// 모두 같은 조각 수를 먹는다. 따라서 약수의 개념으로 접근한다.
function solution(n) {
  let answer = 0;
  let pizzaCount = 1;
  while(true) {
    if(pizzaCount * 6 % n === 0) {
      answer = pizzaCount;
      break;
    }
    pizzaCount += 1;
  }
  return answer;
}

// 다른 사람의 풀이
function solution(n) {
  let pizza = 1;
  while (pizza * 6 % n) {
    pizza++;
  }
  return pizza;
}

1) 주어진 피자를 남기지 않고 모두 같은 조각을 먹어야 하므로, 약수를 구하는 문제

2) 한 판 당 6조각이므로 결국, 6의 배수에 대한 약수를 묻는 문제이다.

3) 사람의 수 n으로 나누었을 때, 나머지가 0이면 된다.

 

<다른 사람의 풀이에 대한 이해>

반복문에 사용에 익숙해지자


피자 나눠 먹기(3)

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

  • 2 ≤ slice ≤ 10
  • 1 ≤ n ≤ 100
function solution(slice, n) {
  return answer = Math.ceil(n / slice);
}

// 다른 사람의 풀이
function solution(slice, n) {
  let answer = 0;
  while(n > slice * answer){
    answer++;
  }
  return answer;
}

피자 나눠 먹기(1)과 같은 문제

 

<다른 사람의 풀이>

반복문을 이용한 풀이에 익숙해지자


배열의 평균값

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.
function solution(numbers) {
  let sum = 0;
  let cnt = 0;
  while(cnt < numbers.length) {
    sum += numbers[cnt];
    cnt += 1;
  }
  return sum / numbers.length;
}

// 다른 사람의 풀이
function solution(numbers) {
  return answer = numbers.reduce((a,b) => a+b, 0) / numbers.length;
}

1) 정답을 위한 변수를 선언한다. // let sum = 0;

2) 횟수를 체크하는 변수를 선언한다. // let cnt = 0;

3) sum에 반복문을 돌면서, 정수 배열 numbers의 값을 계속 더해준다.

4) 평균값은 전체 값 sum에 배열의 길이를 나누면 된다.

 

<다른 사람의 풀이에 대한 이해>

reduce()


참고 영상

https://youtu.be/GkG2KflLDBE?si=stuExoPlfcqpyKzy

댓글