오늘 풀어본 문제는 피자나눠먹기(1) 문제이다
특정 메소드를 써서 간단하게 풀 수도 있고 다른 방법으로 풀 수도 있었다
일단 문제는 다음과 같다
머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.
입출력 | 예 |
---|---|
(n) | (result) |
7 | 1 |
1 | 1 |
15 | 3 |
나는 다음과 같이 생각을 했다
1. 피자를 7조각으로 잘라야하니까 일단 n / 7을 한다
사실 여기까지 밖에 생각 못 했다ㅋㅋㅋㅋㅋ....
function solution(n) {
let answer = Math.floor(n / 7)
return answer;
}
처음에는 이렇게 작성했다
math.floor를 쓴 이유는 뒤에서 말하겠지만 소수가 나와서 뒤를 없애려고 했던 거였다(그리고 관련 메소드는 이거밖에 몰랐음ㅋㅋㅋ)
그리고 생각을 해봤다
사람의 수(n)이 7일 때 모든 사람이 한 조각 이상 먹기 위해 필요한 피자의 수는 1개이다
그러면 (7 / 7) 을 하면 1라는 결과값이 나온다
하지만 다른 n 값을 대입해보면 다른 결과가 나온다
예를 들면 n이 1이면 1 / 7 = 0.1428571429 라는 값이 나오는데
이러면 기대한 값(1)이 아니다
그래서 math.floor를 썼고 다음과 같이 바꾸었다
function solution(n) {
let answer = Math.floor(n / 7) + 1
return answer;
}
하지만 이러면 사람의 수(n)이 7일 때 2라는 결과값이 나온다
아니 어떻게 하지; 라는 생각이 들었고 이를 팀원들에게 물어보았다
그리고 math메소드들을 내가 아직 제대로 모르는 구나 하는 생각이 들었다
최종적으로 작성한 코드는 다음과 같다
function solution(n) {
let answer = Math.ceil(n / 7)
return answer;
}
math.ceil는 올림한 정수를 리턴하는 함수이다
사용법은 여기에 자세하게 쓰겠다
여튼 math.ceil을 사용할 때 n이 1이면 1 / 7 = 0.1428571429 라는 값을 올림해서 기대한 값인 1이 나온다
다른 값도 대입해보자
n = 7 -> 7/7은 1
math.ceil을 써서 올림해도 1이라는 결과값 출력
n = 15 -> 15/7 = 2.142857...
math.ceil을 써서 올림을 하니 결과값 3이 출력된다
아니 내가 너무 어렵게 생각을 한 건가 싶기도 하고
너무 끼워맞추기 식으로 문제를 풀려고 한건가 싶기도 하다
아직 논리적으로 생각하는 건 더 많은 연습이 필요해보인다