-
[알고리즘 문제] 강아지와 병아리IT/알고리즘 2019. 1. 6. 10:22
요즘 스프링 공부를 하느라 알고리즘 공부를 안했더니 뇌가 굳은 것같다..ㅠㅠㅠㅠ
다시 뇌를 말랑말랑하게 하기 위해서 앞으로 알고리즘 공부도 할 예정인데 먼저 간단한 알고리즘 문제를 풀어봤다.
올리고 나니 생각보다 너무너무너무 간단해서 민망ㅎ;
내가 푼 방식은 이렇다
1. 주어진 강아지와 병아리 합을 반으로 나눈다. (홀수일 경우에 나누면 병아리가 1마리 더 많은 것으로 설정)
2. 각각 나눈 수를 4(강아지다리)와 2(병아리다리)로 곱해주고 더해준다.
3. 강아지다리와 병아리다리 수가 입력받은 다리의 수보다 적다면 강아지를 한마리 증가시켜주고 병아리는 한마리 줄인다.
입력받은 다리보다 많다면 병아리를 한마리 증가시켜주고 강아지는 한마리 줄인다.
4. 입력받은 숫자가 나올때까지 반복한다.
바로 코드로 보도록 하자!
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869public 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
'IT > 알고리즘' 카테고리의 다른 글
[알고리즘 문제] 백준 알고리즘 4458번 : 첫글자를 대문자로 (0) 2019.03.20 [알고리즘 문제] 팩토리얼 (0) 2019.03.18 [알고리즘 문제] 백준 알고리즘 2814번 : 최소인수 (0) 2019.03.17 [알고리즘 문제] 백준 알고리즘 1225번 : 이상한 곱셈 (0) 2019.03.11 [알고리즘 문제] 각 자리수의 역과 합 (2) 2019.01.08