본문 바로가기

코테/구름톤 챌린지

[ 구름톤 챌린지 ] 운동 중독 플레이어

728x90

문제

근력 운동을 할 때, 1회에 최대한으로 들 수 있는 무게를 1RM 이라고 한다. 본인의 1RM이 얼마나 되는지를 알아야 효율적인 운동 방식을 고를 수 있어 IRM을 측정하는 것은 무척 중요하다. 그러나 무작정 무거운 무게를 들어서 측정하는 방식은 다칠 위험이 크므로, 보통은 다양한 공식을 사용해서 1RM을 추정한다. 최대 무게가 아닌 적당한 무게를 몇 번 반복해 들었나를 가지고 내가 한 번에 들 수 있는 최대 무게를 추정하는 식이다. 이번 문제에서는 아래와 같은 공식을 사용한다. W는 무게, R은 반복 횟수를 의미한다. IRM=W x (1+ R/30) 최근에 운동을 시작한 플레이어는 본인의 운동 기록을 바탕으로 1 RM을 계산하려고 한다. 플레이어가 스쿼트 한 세트에서 들어올린 무게와 반복 횟수가 주어졌을 때, 플레이어의 1RM을 소수점 이하의 값을 버린 뒤 출력하시오. 플레이어가 들 수 있는 무게는 무한히 크다고 가정한다.

입력

첫째 줄에 플레이어가 스쿼트 한 세트에서 들어올린 무게 M>와 반복 횟수 R이 공백을 두고 주어진다.

  • 1 ≤ W ≤ 1000000
  • 1≤ R ≤100
  • 입력에서 주어지는 모든 수는 정수이다.

출력

플레이어의 1RM을 소수점 이하의 값을 버린 뒤 출력한다.

제출 코드

const readline = require('readline');
let rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});
let input;
rl.on('line', (line) => {
	input = line;
	rl.close();
});

rl.on('close', () => {
	const [w,r] = input.split(" ").map(Number);
	console.log(Math.floor(w*(1+r/30)));
})

배운점

  • readline 모듈은 처음이라 입출력을 어떻게 나누면 좋을지 고민했다.
  • 나는 소수점을 버리는 메서드로 floor를 사용했는데 답지에는 trunc를 사용해서 이 두 메서드의 차이점에 대해 알아보았다.
  • Math.floor vs Math.trunc
    ex)Math.floor() 
    console.log(Math.floor(4.9));  // 4
    console.log(Math.floor(-4.9)); // -5
    ex)Math.trunc()
    console.log(Math.trunc(4.9));  // 4
    console.log(Math.trunc(-4.9)); // -4
  • trunc는 내림을 하더라도 0으로 향하는 반면 floor는 무조건 아래만 향해서 내림한다.

느낀점

1일차는 단순 구현이라 크게 어려운 건 없었다.

728x90