• 백준 12353번 Baby Height :: 마이구미
    알고리즘 풀이/수학 2017. 2. 7. 21:32
    반응형

    이번 글은 백준 알고리즘 12353번 "Baby Height" 를 다뤄본다.

    2013 Google code jam 문제이다.

    영어 문제라 번역이 필요하다.


    Every parent wants to know how tall their child will grow.

    모든 부모는 자녀들의 키가 얼마나 자라는 지 알고 싶어한다.


    Dr.Spaceman's algorithm, which we describe below.

    Dr.Spaceman의 알고리즘을 아래에서 설명하겠다.


    Accurately calculates, with errors low, Adult height of any child, with just genetics, yo!

    단순히 유전학으로 어떤 아이의 성인 신장을 낮은 오류와 함께 정확한 계산한다.


    Take the mother's height and add it to the father's height.

    엄마의 신장에 아빠의 높이(feet,inch)를 더한다.


    For a girl, substract five inches, this I will highlight.

    소녀에 대해, 5인치를 뺀다. 이 부분을 강조하겠다.


    For a boy, add five inches, or it won't be right.

    소년에 대해, 5인치를 더하거나 더하지 않는다.


    Then divide by two, and get your target in plain sight.

    그 후 2로 나누고, 당신의 대상명백한 시야를 통해 얻어라.


    Dr.Spaceman is convinced that target is precise.

    Dr.Spaceman은 대상의 정확성을 확신한다.


    Plus or minus four, in inches, truly wil suffice

    4인치를 더하거나 뺌으로써, 정확히 충족시킨다.


    문제의 입력에서는 부모의 높이(feet,inch)와 성별을 주어진다.

    주어지는 부모의 높이(feet,inch)와 성별을 통해 성인이 되었을 경우 자녀의 가장 작은, 큰 높이(feet,inch) 에 대한 경우 범위이다.


    문제에서 해결하기 위한 방법은 알려주었다.

    1. 엄마와 아빠의 높이(feet,inch)를 더한다. 

    2. 소녀는 5인치 뺀다.

    3. 소년은 5인치 더한다.

    4. 2번과 3번에서 구한 결과를 더한 후 2로 나눈다. 


    알고 있어야하는 지식은 feet와 inch이다.


    1 feet = 12 inch


    feet => inch / 12

    inch => inch % 12


    1 피트는 12인치라는 것을 알고 있으면 된다.

    나누기와 나머지 연산을 활용할 수 있다.


    주어지는 알고리즘에 따라 부모의 더한 높이와 자식에 따른 인치를 더한 후 2로 나누어 볼 수 있다.


    public static double getHeight(String mother, String father, int inches) {     // mother = 엄마 높이, fater = 아빠 높이, inches = 5 or -5 return (toInches(mother) + toInches(father) + inches) / 2.0; } public static double toInches(String s) { String[] split = s.split("'"); double feet = Double.parseDouble(split[0]); double inches = Double.parseDouble(split[1].substring(0, split[1].length() - 1)); return (feet * 12.0 + inches); }


    그 후 문제에서 주어진 알고리즘의 정확성을 위한 4인치를 더하고 뺄 것이다.

    문제에서 주의할 점은 정답을 정수로 표현해주고 있다.

    하지만 나누기 연산을 통해 소수점이 버려진다는 것을 알 수 있다.

    그렇기에 소수점이 존재할 경우는 4인치를 감소시켜야한다.


    int inches = 4.0;


    if (height != (int) height) { inches = 3.5; }


    최종적으로 inch를 다시 feet와 inch로 표현해주어 출력하면 문제를 해결할 수 있다.


    public static String output(int height) { int feet = height / 12; int inches = height % 12; return feet + "'" + inches + '"'; }


    전체 소스는 아래 Github URL을 통해 확인하길바란다.


    백준 알고리즘 12353번 Baby Height 전체 소스

    https://github.com/hotehrud/acmicpc/blob/master/English/12353.java



    반응형

    댓글

Designed by Tistory.