프로그래머스 3-17 TIL

Seunggyu Jung·2023년 3월 17일
0

1. 피자 나눠먹기(2) : 레벨 0

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씩 더하는 등차수열 방식으로 해결함
  • 보다 직관적이고, 간단하여 참고 하는 것이 좋다고 판단

2. 배열의 평균값 : 레벨 0


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을 매개변수의 길이로 나누면 끝

다른 풀이(1) 및 해설

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의 요소를 하나씩 꺼낸다는 것을 의미

다른 풀이(2)

 function solution(numbers) {
    return numbers.reduce((acc, cur) => acc + cur) / numbers.length
}
  • reduce()메서드를 많이 쓰기에, 이번 주말에 여유가 된다면 공부해놓는 것도 좋다고 생각함

3. 마무리

  • 이전에 풀었던 문제였으나, 막상 다시 풀자니 좀 처럼 풀리지 않고, 예전과 비슷한 방식으로 풀려고 하니 아직 실력이 크게 늘지 않았다고 생각함

  • 가능하면, 어지간하면, 최대한 이번 주에는 reduce()메서드를 꼭 공부해보자!!

profile
감동을 주고픈 개발자(준비생)

0개의 댓글