Q. 머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
function solution(n) {
var answer = 0;
for(let i =1;i <= n ; i++){
if ((6*i) % n === 0){
answer = i;
break; // 여기서 break로 탈출하지 않으면 가장 마지막 요소를 출력
}
}
return answer;
}
- 1단계. 이 문제를 풀 때, n과 6의 최소 공배수를 찾는 것이 핵심이라는 것을 파악
- 2단계. 숫자가 다양한 n이 아닌, 6을 i라는 변수로 천천히 변화시키는 것이 좋다고 파악
- 3단계. 하지만 이대로 반복문을 방치하면 가장 마지막 수가 출력되기에,
break
로 탈출
function solution (n) {
let pizza = 6;
while (true) {
if (pizza % n === 0) {
return pizza/6;
}
pizza += 6;
}
}
- 반복문을 while문으로 잡고, pizza라는 변수에 계속해서 6씩 더하는 등차수열 방식으로 해결함
- 보다 직관적이고, 간단하여 참고 하는 것이 좋다고 판단
Q. 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
function solution(numbers) {
let answer = 0;
for (let i = 0; i<= numbers.length -1; i++){
answer += numbers[i];
}
return answer / numbers.length;
}
- 1단계. 사실 가장 정석적인 풀이라서 우선 반복문을 작성하여 매개변수의 배열의 요소들을 answer에 더함
- 2단계. 더한 answer을 매개변수의 길이로 나누면 끝
function solution(numbers) {
var answer = 0;
for(i of numbers) {
answer += i
}
return answer / numbers.length;
}
- 정석과 큰 차이는 없으나
for(i of arr) {}
은 알아두면 유용함for(i of arr) {}
: 배열 arr의 요소를 하나씩 꺼낸다는 것을 의미
function solution(numbers) {
return numbers.reduce((acc, cur) => acc + cur) / numbers.length
}
- reduce()메서드를 많이 쓰기에, 이번 주말에 여유가 된다면 공부해놓는 것도 좋다고 생각함
이전에 풀었던 문제였으나, 막상 다시 풀자니 좀 처럼 풀리지 않고, 예전과 비슷한 방식으로 풀려고 하니 아직 실력이 크게 늘지 않았다고 생각함
가능하면, 어지간하면, 최대한 이번 주에는 reduce()메서드를 꼭 공부해보자!!