머쓱이네 피자가게 문제
//머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때,
//모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.
class Solution {
public int solution(int n) {
int pizzaPiece = 7; //피자 조각 수 저장
int pizzaCount = 0; //피자 한판을 세기 위한 변수
for (int i = 1; i <= n; i+=pizzaPiece) { //받은 사람수를 피자 조각 수만큼 더하면서 반복
pizzaCount++; //몇판인지 세기.
}
return pizzaCount;
}
}
확실히 공부를 계속 하니까 좀 빨리 수월하게 풀리는 것 같다. 문제가 쉬웠던 거 일수도..
다음문제는 조금 헤매고 있다.
같은 피자가게 문제인데 일단 코드로 보자.
//머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때,
// n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면
// 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
class Solution {
public int solution(int n) {
int pizzaPiece = 6;
int pizzaCount = 0;
for (int i = 1; i <= n*6; i++) {
if (pizzaPiece % n == 0){
pizzaCount++;
}
}
// for (int i = 1; i <= 100; ++i) {
// pizzaCount++;
// }
return pizzaCount;
}
}
이런 식으로 구현하다가 문든 든 생각이 최소공배수랑 최대공약수를 활용해야된다는 것을 떠올리고 검색을 하기 시작했다. 저번에 다른 문제 풀면서 썼던 적이 분명있는데 잘 기억이 안난다.
class Solution {
public static int gcd(int a, int b) { //최대공약수 함수
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
public static int lcm(int a, int b) { //최소공배수 함수
return a * b / gcd(a, b);
}
public int solution(int n) {
int pizzaPiece = 6;
int lcm = lcm(pizzaPiece, n); // 사람 수와 피자 조각 수의 최소공배수 구하는 메서드 실핼
return lcm / pizzaPiece; // 필요한 피자 판 수는 최소공배수를 한 판의 조각 수로 나눈 값
}
}
구글링으로 찾은 코드를 넣고 밑에서 공식에 따라 값을 구하려고 코드를 작성하니까 테스트 케이스를 모두 통과했다. 최소공배수와 최대공약수를 구하는 코드를 내가 직접 구현한게 아니라 정답이 있는거라 아마 프로그래머스도 통과할 것 같다.
class Solution {
public int solution(int n) {
int answer = 1;
while(true){
if(6*answer%n==0) break;
answer++;
}
return answer;
}
}
풀이를 보는데 무한루프를 사용한 사람도 있었다. 무한루프 생각은 해봤는데 저렇게 활용할 수도 있구나.. 하나 배워간다.
'Coding History' 카테고리의 다른 글
2024. 06. 26 문제풀이 (0) | 2024.06.26 |
---|---|
국비 지원 IT(웹앱개발) 취업반 강의 15일차 (다항식 계산기 만들기 과정) (0) | 2024.06.26 |
국비 지원 IT(웹앱개발) 취업반 강의 14일차(다항식 계산기 만들기 과정) (0) | 2024.06.25 |
2024. 06. 24 문제풀이 (0) | 2024.06.24 |
국비 지원 IT(웹앱개발) 취업반 강의 13일차 (0) | 2024.06.24 |