728x90

문제) 병역판정검사는 병역의무자들의 상태를 검사해 징병 여부와 징병 시 어느 방향으로 복무를 시키는 게 좋을지 판정하는 검사로, 남성들은 만 19세가 되는 해에 모두 병역판정검사를 받는다. 신체 등급이 1급부터 3급인 사람은 현역 입영 대상, 4급은 보충역, 5급은 전시근로역, 6급은 병역면제 처분을 받는다. 올해 20살이 된 준이와 친구들은 병역판정검사를 받아야 한다. 준이와 친구들은 매우 건강하기 때문에 다른 질병의 유무와 관계 없이 신장 및 체중으로만 신체 등급이 결정된다. 준이와 친구들의 신장과 체중이 주어지면 아래 표를 참고해 신체 등급을 알려주자.

입력) 첫째 줄에 병역판정검사를 받는 사람의 수 T 가 주어진다. (1 ≤ T ≤ 200)

둘째 줄부터 T 개의 줄에 키와 몸무게가 각각 cm, kg 단위로 주어진다.

입력으로 주어지는 수는 모두 200 이하의 양의 정수이다.

 

출력) 각 사람의 신체 등급을 한 줄에 하나씩 순서대로 출력한다.

from sys import stdin

def BMI(kg, m):
    return kg/((0.01*m)**2)

for _ in range(int(input())):
    m, kg = map(int, stdin.readline().rstrip().split())
    bmi = BMI(kg, m)
    if m < 140.1: print(6)
    elif m < 146: print(5)
    elif m < 159: print(4)
    elif m < 161:
        if bmi < 16 or bmi >= 35: print(4)
        else: print(3)
    elif m < 204:
        if bmi < 16 or bmi >= 35: print(4)
        elif bmi < 18.5 or bmi >= 30: print(3)
        elif bmi < 20 or bmi >= 25: print(2)
        else: print(1)
    else: print(4)

풀이 : T 번동안 반복해서 입력을 받을 때 입력받은 데이터를 각각 m, kg에 저장해준다. 그 후 BMI를 계산해준다. 그 후엔 조건을 따져보며 결과를 출력해주면 되는데 여기서 중요한 것은 if 문을 사용할 때 이상과 미만의 구간을 일일이 모두 적어줄 필요가 없다는 것이다. 140.1 이상 146 미만의 경우, 이미 앞에서 140.1 미만인지 아닌지를 판별했기 때문에 140.1 이상이라는 것은 확정이 된 상태이다. 그렇기에 146 미만인지 아닌지만 조건문에 적어주면 해당 구간에 있는 사람을 판별해낼 수 있다.

+ Recent posts