문제 설명
머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 <= n <= 100
입출력 예
n | result |
6 | 1 |
10 | 5 |
4 | 2 |
class Solution {
public int solution(int n) {
int answer = 0;
int max;
int pizza = 6;
if (pizza <= n) {
max = n;
} else {
max = pizza;
}
for (int i = max; max <= i; i++) {
if (i % n == 0 && i % pizza == 0) {
answer = i / pizza;
break;
}
}
return answer;
}
}
이 문제는 초반에 풀었던 문제인데, 지금 코드를 다시 보면서 다음부터는 꼭 변수명을 잘 써야겠다고 생각했습니다. 생각보다 한눈에 잘 들어오지 않는 변수명이어서 처음에는 변수가 무엇을 뜻하는지 한참 고민했어요.
pizza 변수까지는 안 써도 됐을 것 같긴 하지만, 개인적으로 변수선언을 좋아해서 썼습니다. 그래서 가독성이 더 떨어져보이는 것 같기도 하구요. max는 if문을 통해 n 또는 pizza 중에서 더 큰 값을 저장합니다. 여기서 구한 max값은 for문에서 조건식에 쓰입니다. 이후 n과 pizza의 최소 공배수를 구합니다. 저희가 구해야 할 값은 피자가 몇 판인지 구하는 것이니 6으로 나눠줬구요.
하지만 여기에 큰 문제가 있다면 for문의 조건식이 항상 참이라는 점입니다. 코드를 작성해본 지 얼마 되지 않아서 범한 실수였던 것 같습니다. 정답을 맞췄다는 것만으로도 기분이 좋아서 넘어갔나봅니다. 코드를 조금 더 개선해보자면 얼마 전에 다른 게시글에서 언급했던, 유클리드 호제법을 쓰면 조금 더 식이 깔끔해보이지 않았을까 싶습니다.
최소 공배수(Least[lowest] Common Multi, LCM)를 구하는 법은 두 수(혹은 그 이상)의 최대 공약수를 먼저 구한 후 두 수의 곱셈을 최대 공약수로 나눠주면 됩니다.
public int lcm(int a, int b) {
int gcd = gcd(a, b);
return (a * b) / gcd;
}
최대 공약수 구하는 법은 아래 링크로.
[프로그래머스 코딩테스트] 분수의 덧셈(Java) https://sigfriede.tistory.com/16
'프로그래머스 > Lv. 0(코딩테스트 입문)' 카테고리의 다른 글
[프로그래머스 코딩테스트] 배열의 평균값(Java) (0) | 2023.03.24 |
---|---|
[프로그래머스 코딩테스트] 피자 나눠먹기(3)(Java) (0) | 2023.03.23 |
[프로그래머스 코딩테스트] 피자 나눠 먹기(1)(Java) (0) | 2023.03.23 |
[프로그래머스 코딩테스트] 짝수는 싫어요(Java) (1) | 2023.03.23 |
[프로그래머스 코딩테스트] 최빈값 구하기(Java) (0) | 2023.03.23 |