Java

[자바] 프로그래머스 피자나눠먹기(1)(2)(3)

어텀잉 2023. 9. 20. 10:03
728x90
반응형
SMALL
피자 나눠 먹기 (1)

class Solution {
    public int solution(int n) {
  
    int result=0;
        
        if(n<8){
         result=1;
        }else if(n%7==0){
         result=n/7;
        }else if(n%7>0){
            if(n<8){
                result=1;
            }else{
                 result=(n/7)+1;
            }
        }
        return result;
    }
}

 

이제 코드를 세부적으로 알아보자.

 

 

<인원수가 피자조각 수(=8) 보다 작을 경우>

if(n<8){
         result=1;
        }

모든 사람이 한 조각씩만 먹으면 되기 때문에  무조건 1을 반환하게 하였다.

 

<피자조각 수로 인원수가 딱! 나누어 떨어질 경우>

else if(n%7==0){
         result=n/7;
        }

나머지가 0이 되게 하는 수를 반환하게 하였다.

  

<피자 조각수가 인원수로 나눠떨어지지 않을 경우>

  else if(n%7>0){
            if(n<8){
                result=1;
            }else{
                 result=(n/7)+1;
            }

이 부분이 조금 고역이었는데 처음에는 나머지가 0보다 클 경우의 if 문만 작성했었다.

그런데 계속 결과값이 다르게 출력되었다.

알고보니 8 이하의 숫자가 첫 번째 조건문에서만 빠지는게 아니라 나머지가 0이상인 경우에도 해당되어 이 조건문에서도 들어가게 되는 것이었다.............

 

그래서 이 조건문 안에 또 조건문을 넣어 8보다 작을 경우와 아닐 경우로 나눠서 식을 다시 작성했더니 제대로 답이나왔다!!!!

 


 

피자 나눠 먹기 (2)

class Solution {
    public int solution(int n) {

        int answer = 0;
        
        for (int i = 1; i <= 6 * n; i++) {
            if (6 * i % n == 0) {
                answer = i;
                break;
            }
        }   
        return answer;
        }
    }

 

처음에 어떻게 풀어야 할지 감이 안와서 if문 안에 if문 넣고 for문 넣고 식이 엄청 길어졌었다.

자꾸 인원수가 피자조각 수보다 작을 경우, 클 경우 이런식으로 분리해서 생각했는데, 

 

for (int i = 1; i <= 6 * n; i++) {
            if (6 * i % n == 0) {
                answer = i;
                break;
            }
        }   

피자 조각 수와 피자 판 수를 한꺼번에 곱하여 전체 피자 조각수를 구한 뒤 인원수로 나누기만 하면 생각보다 간단하게 풀리는 문제 였다.

 

6 * i = 피자 조각 수*피자 판 수 -> 총 피자 조각 수의 합

다 먹고 남은 피자 조각이 없어야 한다고 했기 때문에

총 피자 조각 수의 합을 인원수로 나눈 경우 나머지가 0이 나오면 식이 성립한다!!

 

 


 

피자 나눠 먹기 (3)

 

class Solution {
    public int solution(int slice, int n) {

    int result =0;
 
        if(n<slice){
         result =1;
        }else if(n%slice==0){
          result =n/slice;
        }else if(n%slice>0){
          result =(n/slice)+1;
        }
        
       return result;
    }
}

첫 번째 문제와 거의 동일한 문제로 첫 문제에서는 조각 수를 정해줬다면 여기서는 조각수를  정해주지 않았을 뿐이다.

따라서 첫 번째 문제에서 조각 수 부분만 slice 로 대체해주어 프로그램에서 알아서 입력하여 답을 도출하도록 우리는 식만 작성해주면 된다!!!

 

728x90
반응형
LIST