<문제 제시>
머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
<예시 입출력>
<문제 해결 과정>
앞선 피자 나눠 먹기 문제들과는 달리 이번에는 잘라내는 조각 수를 입력받아 처리한다.
그 원하는 조각 수는 slice에 담기고, 사람의 수 n이 주어지고, 이 n명의 사람이 최소 한 조각 이상 먹기 위해서 필요한
최소 피자 판 수를 구하는 것이다.
Try 1) 모든 테스트를 통과하지 못함
public static int solution(int slice, int n) {
int answer = 1;
for(int i = 0; i <= n; i++) {
if(slice < n) {
answer++;
slice += slice;
}
else break;
}
return answer;
}
최소 필요한 판 수는 1판 이상이므로 answer의 초기값을 1로 설정하고 시작하고자 하였다.
조각 수가 사람의 수보다 작으면 계속 더해주고, 조각 수는 누적하고자하였다.
만약 조각 수가 사람의 수보다 많으면 그대로 break를 해주었다.
조각 수를 누적해주는 부분과 조각 수가 사람의 수보다 많은 경우 처리해주는 부분에서 미흡했던 점이 있던 것 같았다.
Solution 1)
1. 인원 수가 피자 조각으로 나누어 떨어질 경우에는 그대로 나눠주면 최소 판수를 구할 수 있다.
2. 인원 수가 피자 조각으로 나누어 떨어지지 않을 경우에는 두 값을 나눈 후 +1을 해주어야
부족하지 않게 먹을 수 있도록 피자를 한 판 더 시키는 로직이 완성된다.
따라서 사람의 수에서 slice를 나누었을때 나누어떨어지는지 아닌지를 먼저 구분해준다.
1) 입력한 조각수로 나누어 떨어질때
if(n % slice == 0) answer = n / slice;
이처럼 나누어떨어지게되면 단순히 몫을 반환해주면 되는 문제이다.
2) 입력한 조각수로 나누어 떨어지지 않을때
else answer = n / slice + 1;
나누어 떨어지지 않으면 최소 필요한 판 수가 더 필요하므로 '피자 나눠 먹기 (1)' 문제처럼 +1 판을 추가해준다.
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// #. 피자 나눠 먹기(3)
public class divide_pizza3 {
public static int solution(int slice, int n) {
int answer = 0;
if(n % slice == 0) answer = n / slice;
else answer = n / slice + 1;
return answer;
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 첫번째 변수 입력
System.out.print("피자 조각 수 입력 = ");
int slice = Integer.parseInt(br.readLine());
// 두번째 변수 입력
System.out.print("먹는 사람의 수 입력 = ");
int n = Integer.parseInt(br.readLine());
System.out.println(solution(slice, n));
}
}
동적으로 피자 조각을 입력받아 처리한다는 점에서 식을 어떻게 구성할지 막막했지만,
문제를 해결하는 과정에서 단순히 몫을 반환하고 +1을 더해주는 로직 등을 알아낼 수 있어서 수월하게 풀 수 있었다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120816
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '문자열 뒤집기' - Java (0) | 2023.02.22 |
---|---|
[프로그래머스] '직각삼각형 출력하기' - Java (0) | 2023.02.22 |
[프로그래머스] '피자 나눠 먹기 (2)' - Java (0) | 2022.12.20 |
[프로그래머스] '피자 나눠 먹기 (1)' - Java (0) | 2022.12.19 |
[프로그래머스] '배열의 평균값' - Java (0) | 2022.12.19 |