본문 바로가기
알고리즘/CodeUp PS

[CodeUp][Python] 1229번 : 비만도 측정 2

by 빛밤하늘 2021. 8. 30.
반응형

밑의 링크는 CodeUp에서의 문제 링크입니다.

문제는 링크를 통해서 직접 봐주시길 바랍니다.

 

비만도 측정 2

키 h와 몸무게 w가 공백을 기준으로 실수로 입력된다.(1≤w, h≤200) 반드시 double형을 사용해야 함. float으로 하면 오답처리되는 케이스가 있음.

codeup.kr

 

 

 

주의해야 할 점

1. map, split을 사용하는 입력 방식

실수나 정수인 여러 값들이 입력값일 때,

split 메서드를 사용해 공백이나 어떤 문자를 기준으로 입력값을 여러 값들로 분리하고,

map 내장 함수로 각각의 값들을 int형이나 float형으로

정수, 실수 자료형으로 변환하는 하는 기법은 매우 많이 쓰입니다.

코드 이해부터 하고 나면 다른 문제에서도 외운 듯이 사용해봅시다.

num1, num2 = map(float, sys.stdin.readline().split())

 

2. 파이썬에서의 크기 비교

다른 언어들에서는 10 이상 20 이하와 같은 크기 비교를 조건식으로 표현하려면 

우리가 수학책에서 일반적으로 보던 '10<= (비교값) <= 20'과 같은 표현을 쓰면 안 되고

논리 연산자를 같이 사용해야 합니다.

하지만, 파이썬에서는 위와 같은 '10 <= (비교값) <= 20'과 같은 표현을 조건식에 사용할 수 있습니다.

 

3. double 자료형, float 자료형

문제에서 입력에 대한 설명을 보면

 

'반드시 double형을 사용해야 함. float으로 하면 오답처리되는 케이스가 있음.'

 

이라고 주의사항을 말하고 있습니다.

이는 C, C++, Java로 제출할 때의 유의사항입니다.

저처럼 파이썬으로 코드를 짤 때는 그냥 float 내장 함수를 사용해 실수로 형 변환을 하면 됩니다.

애초헤 파이썬에는 float로만 실수를 표현하고 double로 실수를 표현하는 방법이 없습니다.

파이썬에서는 float 내장 함수의 반환형이

C, C++, Java의 double 자료형과 동일하게 동작하고 정밀도도 같다고 합니다.

 

예제 설명

1. 첫 번째 예제

- 입력

150 60

 

- 출력

과체중

 

- 설명

입력한 키와 몸무게는 각각 150, 60입니다.

 

입력한 키는 150이므로 표준 몸무게는 키가 150 이상 160 미만일 때의 공식인

(실제 키 - 150) / 2 + 50 공식을 통해 계산합니다.

 

표준 몸무게는 (150 - 150) / 2 + 50 = 50kg입니다.

실제 몸무게와 표준 몸무게를 비만도를 구하는 공식

(실제 몸무게 - 표준 몸무게) * 100 / 표준 몸무게에 대입해

비만도를 구하면 (60 - 50) * 100 / 50 = 20이므로 

비만도가 10 이상 20 이하인 과체중에 속합니다. 따라서 문자열 '과체중'을 출력합니다.

 

생각한 풀이 과정

키와 몸무게를 공백으로 구분해 입력합니다.

키, 몸무게 모두 1 이상 200 이하의 실수입니다.

 

먼저 입력한 키에 따른 표준 몸무게를 계산해봅니다.

입력한 키가 150 미만이라면, 공식 (실제 키 - 100)에 대입해 표준 몸무게를 구합니다.

입력한 키가 150 이상 160 미만이라면, 공식 (실제 키 - 150) / 2 + 50에 대입해 표준 몸무게를 구합니다.

그 외의 경우인 입력한 키가 160 이상이라면, 공식 (실제 키 - 100) * 0.9에 대입해 표준 몸무게를 구합니다.

 

표준 몸무게를 구했으므로 표준 몸무게와 입력한 몸무게에 따른 비만도를 계산해봅니다.

비만도를 구하는 공식은 (실제 몸무게 - 표준 몸무게) * 100 / 표준 몸무게입니다.

 

계산한 비만도가 10 이하라면, 정상이므로 문자열 '정상'을 출력합니다.

계산한 비만도가 10 이상 20 이하라면, 과체중이므로 문자열 '과체중'을 출력합니다.

그 외의 경우인 계산한 비만도가 20 초과라면, 비만이므로 문자열 '비만'을 출력합니다.

 

 

제출한 파이썬 코드

# readline을 사용하기 위해 import합니다.
from sys import stdin


# 키 h, 몸무게 w를 공백으로 구분해 입력합니다.
# 1 <= w, h <= 200
# 각각 float형으로 변환합니다.
h, w = map(float, stdin.readline().split())
# 표준 몸무게를 저장할 변수를 선언합니다.
# 0으로 초기화합니다.
standard_weight = 0
# 비만도를 저장할 변수를 선언합니다.
# 0으로 초기화합니다.
obesity_level = 0

# 키에 따른 표준 몸무게를 구해봅니다.
# 키가 150 미만이라면
if h < 150:
    # 표준 몸무게는 (실제 키 - 100)로 계산하고 변수에 저장합니다.
    standard_weight = h - 100
# 키가 150 이상 160 미만이라면
elif 150 <= h < 160:
    # 표준 몸무게는 (실제 키 - 150) / 2 + 50으로 계산하고 변수에 저장합니다.
    standard_weight = (h - 150) / 2 + 50
# 그 외의 경우인 키가 160 이상이라면
else:
    # 표준 몸무게는 (실제 키 - 100) * 0.9로 계산하고 변수에 저장합니다.
    standard_weight = (h - 100) * 0.9

# 실제 몸무게, 표준 몸무게로 비만도를 계산하고 변수에 저장합니다.
obesity_level = (w - standard_weight) * 100 / standard_weight

# 비만도가 10 이하라면
if obesity_level <= 10:
    # 정상이므로 문자열 '정상'을 출력합니다.
    print('정상')
# 비만도가 10 이상 20 이하라면
elif 10 <= obesity_level <= 20:
    # 과체중이므로 문자열 '과체중'을 출력합니다.
    print('과체중')
# 그 외의 경우인 비만도가 20 초과라면
else:
    # 비만이므로 문자열 '비만'을 출력합니다.
    print('비만')

 

제출 결과

CodeUp 1229번 : 비만도 측정 2에서 코드 제출 결과
CodeUp 1229번 : 비만도 측정 2에서 코드 제출 결과

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

※ 공감 버튼과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍

반응형

댓글