구름톤 챌린지 1주차 - 1번

찡완이·2023년 8월 17일
0

1일차 - 운동 중독 플레이어


문제 내용 정리

  • 근력 운동 시 1회 들 수 있는 최대 무게를 1RM이라 하고, 무게 W, 반복 횟수 R이 주어질 때, 1RM = W * (1 + R/30) 이라는 식을 통해 1RM을 구하는 문제입니다.
  • 계산 과정에서 구한 1RM의 경우, 소수점은 버리고 출력해야 합니다.(ex : 1.5 -> 1로 출력)

해결 방법

  • C++에서 변수를 다룰 때 실수를 정수형 변수(int)에 대입하면 자동으로 소수점을 버린 값이 대입된다는 점을 활용하였습니다.

주의 사항

  • 입력받는 W,R의 경우, 정수형(int)으로 입력받게 되면 계산 과정 내부에서 소수점을 무시하고 계산하게 되므로 계산 결과가 잘못 나올 수 있습니다.
    • ex) R = 40, W = 10의 경우
      • 정상적인 결과 : W * (1+R/30) = 23.333... -> 23
      • 정수형으로 입력받은 결과 : W * (1+R/30) = 20
    • 정수형 간의 나눗셈은 소숫점을 무시한 정수형 값을 반환하므로
      40 / 30 이 1.333... 이 아니라 1로 출력되어 결과가 달라짐
  • 이를 해결하기 위해 나눗셈이 적용되는 변수 R의 경우, float형을 사용하였습니다.
    • R / 30에서 R이 int형이라면 소숫점이 무시되어 결과가 잘못 출력되나, float형이라면 실수와 정수간 계산으로 취급되어 소숫점이 무시되지 않으므로 (결과가 실수형으로 반환되기에) 정확한 계산이 이루어짐.

작성 코드

#include <iostream>
using namespace std;
int main() {
	int w;
	float r; // r은 실수형으로 받아야 계산 과정이 제대로 이루어짐
	cin >> w >> r;
	int rm = w * (1 + r / 30); // rm을 정수형으로 설정해 소숫점을 버린 값을 대입
	cout << rm << endl; // 소숫점 없는 정수 값 출력
}

소감

  • 자료형에 따른 계산 과정의 변화를 다시 한 번 느낄 수 있게 해주는 좋은 문제였습니다.
  • 난이도가 높지 않고 기초적인 부분에서의 지식을 요구하는 유형의 문제여서 복습에 도움이 되었습니다.
profile
코딩공부합니다

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

이렇게 유용한 정보를 공유해주셔서 감사합니다.

답글 달기