ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘 문제] 강아지와 병아리
    IT/알고리즘 2019. 1. 6. 10:22

     요즘 스프링 공부를 하느라 알고리즘 공부를 안했더니 뇌가 굳은 것같다..ㅠㅠㅠㅠ

    다시 뇌를 말랑말랑하게 하기 위해서 앞으로 알고리즘 공부도 할 예정인데 먼저 간단한 알고리즘 문제를 풀어봤다.






    올리고 나니 생각보다 너무너무너무 간단해서 민망ㅎ;



    내가 푼 방식은 이렇다


    1. 주어진 강아지와 병아리 합을 반으로 나눈다. (홀수일 경우에 나누면 병아리가 1마리 더 많은 것으로 설정)

    2. 각각 나눈 수를 4(강아지다리)와 2(병아리다리)로 곱해주고 더해준다.

    3. 강아지다리와 병아리다리 수가 입력받은 다리의 수보다 적다면 강아지를 한마리 증가시켜주고 병아리는 한마리 줄인다. 

       입력받은 다리보다 많다면 병아리를 한마리 증가시켜주고 강아지는 한마리 줄인다.

    4. 입력받은 숫자가 나올때까지 반복한다.



    바로 코드로 보도록 하자!


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    public class DogandChick {
        
        public static void main(String[] args) {
            
            Scanner scan = new Scanner(System.in);
            
            //강아지와 병아리 수
            int dog = 0;
            int chick = 0;
            
            //입력받은 다리수랑 계산한 다리수 비교할 변수
            int tmp = 0;
            
            while(true) {
                //강아지와 병아리의 합과 다리 수를 입력
                int sum = scan.nextInt();
                int leg = scan.nextInt();
                
                //조건 : 0 0 을 입력받았을 때 종료
                if((sum==0&& (leg==0)) {
                    System.out.println("입력을 종료합니다.");
                    break;
                    
                //조건 : 입력받은 수가 범위를 벗어날 경우 input error 출력
                }else if((sum>=1000|| (leg>=4000)){
                    System.out.println("INPUT ERROR!");        
                }else{
                    //강아지 병아리 합 반으로 나누기
                    dog = sum/2;
                    chick = dog + sum%2;
                    
                    //다리의 갯수 계산
                    tmp = (dog*4+ (chick*2);
                    
                    while(true) {
                        //입력받은 다리의 수가 tmp보다 클 경우
                        if(leg > tmp) {
                            dog++;
                            chick--;
                            tmp = (dog*4+ (chick*2);
                            //주어진 데이터로 마리수 정할 수 없을 때
                            if(dog<0 || chick<0) {
                                System.out.print(0);
                                break;
                            }
                        //입력받은 다리의 수가 tmp보다 작을 경우
                        }else if(leg < tmp) {
                            dog--;
                            chick++;
                            tmp = (dog*4+ (chick*2);
                            //주어진 데이터로 마리수 정할 수 없을 때
                            if(dog<0 || chick<0) {
                                System.out.print(0);
                                break;
                            }
                        //같으면 강아지와 병아리 수 출력
                        }else if(leg == tmp) {
                            System.out.print(dog + " " + chick);
                            break;
                        }
                        
                    }
                    System.out.println();
                }
            }
        }
        
    }
     
    cs


    나는 여기서 주어진 데이터로 마리 수를 정할 수 없을 조건식을 강아지나 병아리가 음수가 나올 때로 

    정했는데 이 밖에 다른 조건이 있는지 더 생각해봐야겠다.



    문제 출처 : jungol


    댓글

Designed by Tistory.