Level 0) 수학, 배열(1)

Doozuu·2022년 12월 28일
0

프로그래머스 (JS)

목록 보기
5/183

📌 문제 1. 피자 나눠 먹기

function solution(n) {
    var answer = 0;
    n <= 7 ? answer = 1 : answer = Math.ceil(n / 7);
    return answer;
}

-> 7보다 같거나 작은 경우를 따로 고려할 필요없이 그냥 Math.ceil(n / 7) 만 해도 된다!



📌 문제 2. 피자 나눠 먹기 (2)

분석

6명 : 6 / 6 = 1판
4명 : 4 / 2(4와 6의 최대공약수) = 2판
10명 : 10 / 2(10과 6의 최대공약수) = 5판
-> 공식 : n / n과 6의 최대공약수

function solution(n) {
    var answer = 0;
 
    function fnGCD(a, b){
    return (a%b)? fnGCD(b, a%b) : b;
    }
    
    return answer = n / fnGCD(n,6);
}

-> 맞긴 했는데 너무 복잡하게 푼 것 같다.


좀 더 깔끔한 풀이 : 나머지를 이용한 풀이.

  1. 피자 조각에서 사람 수를 나누어서 나누어 떨어지면 끝내고, 아니면 6조각씩 계속 더해서 반복.
  2. 마지막에 6으로 나누어 판 수를 구함.
const solution = (n) => {
    let piece = 6

    while(true) {
        if (piece % n === 0) {
            break
        }
        piece += 6
    }

    return piece / 6
}

⭐️ 위와 동일하게 나머지를 이용한 풀이 + 코드 단축

function solution(n) {
    let pizza = 1;
    while (pizza * 6 % n) {
        pizza++;
    }
    return pizza;
}


📌 문제 3. 피자 나눠 먹기 (3)

위에서 배운 방식을 이용해서 풀어보았다.

function solution(slice, n) {
    let pizza = 1;
    
    while(pizza * slice < n){
        pizza++;
    }
    
    return pizza;
}

아예 간단하게 아래처럼 해도 된다.

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


📌 문제 4 : 배열의 평균값

문제 : 정수 배열 numbers가 매개변수로 주어질 때, numbers 원소의 평균값 return하기.

내 코드

function solution(numbers) {
    let answer = 0;
    let sum = 0;
    for(let i=0;i<numbers.length;i++){
        sum += numbers[i];
        answer = sum / numbers.length;
    }
    return answer;
}

for문 단축

for(i of numbers) {
        answer += i
  }

참고) reduce 활용

function solution(numbers) {
    var answer = 0;

    answer = numbers.reduce((a, b) => a + b, 0)
    answer /= numbers.length

    return answer;
}
    
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글