짝수는 싫어요
문제 설명
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 100
풀이
음.. Array.from 등을 써도 될꺼 같긴 한데.. 그냥 클래식하게 for문으로 작업했다.
const solution = (n) => {
let oddArr = [];
for(let i = 1; i <=n; i += 2) oddArr.push(i);
return oddArr;
}
피자 나눠 먹기 (2)
문제 설명
머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 ≤ n ≤ 100
풀이
음 최소 공배수? 를 구하는것 같다.
피자는 6조각으로 나누어지니 6과 주어진 n의 최소 공배수를 구해야 한다.
제한사항에 조각은 정수라고 안나와있어서 조금 헷갈리긴 하는데 정수겠지..
여튼! LMC를 구해보자.
a,b의 LMC는 a*b / gcd 니까 우선 gcd를 구하는 재귀함수를 만들어보면
const calcGCD = (a, b) => b === 0 ? a : calcGCD(b, a%b);
간단하게 이렇게 한줄로 짜놓고..
이걸 이용해서 최소 공배수를 구하는 식을 짜보면
const solution = (n) => {
const calcGCD = (a, b) => b === 0 ? a : calcGCD(b, a%b);
const gcd = calcGCD(n, 6);
return (n*6)/gcd;
}
이렇게 최소공배수를 구할 수있다.
근데 return 해야 하는건 피자의 판수니까 최대공배수 / 6 해주면 끝!
const solution = (n) => {
const calcGCD = (a, b) => b === 0 ? a : calcGCD(b, a%b);
const gcd = calcGCD(n, 6);
return n/gcd;
}
왜 ((n*6)/gcd)/6 이 아니라 갑자기 n/gcd가 되었냐면,
이 식에서 6은 분자 분모에 공통으로 나눌 수 있으므로 6을 날려버리면 저렇게 된다.
어.. 저렇게 자바스크립트로 써져있으니까 이해가 잘안갈수있겠지만..
6n / 6gcd 이거랑 똑같다.