관리 메뉴

한다 공부

[C++] 백준 알고리즘 19363번 요요 시뮬레이션 본문

Algorithm/문제풀이

[C++] 백준 알고리즘 19363번 요요 시뮬레이션

사과당근 2021. 9. 12. 03:28

눈물이.. 나는군..^^

 

우선 자신의 언어에서 -5/2가 -3인지 확인해보자

c++은 -2가 나온다

그럼 주구장창 해도 틀렸습니다 나옴,,

힌트 아랫부분에 이 내용이 쓰여있어서 진짜 몰랐다,,

 

결국 구글링해서...

버림은 cmath include하고 floor쓰면된다는 걸 알게 된..

그리고 floor안에 double이나 float로 형변환 안 해주면 틀린다


문제가 좀 말이 많다..

요요라길래 어릴 때 가지고 놀던 그 요요 장난감인줄 알았다

 

그냥 입력하란거 입력받고

출력하란거 출력하고

계산부분 구현하면 답이,, 나온다

 

19363
19363

 

다이어트 전 일일 에너지 섭취량과 일일 기초 대사량을 l0 라는 변수에 같이 입력 받아서 좀 헷갈렸는데

기초 대사량은 변하기 때문에 새로운 변수 만들어 줘야함

난 change_b로 담았다

 

아 그리고 당연히 요요라길래...

다이어트 전 몸무게보다 다이어트 후 몸무게가 많이 나가면 요요인줄 알았는데

그냥 살이 1g이라도 찌면 요요였던 것임~

 

#include<iostream>
#include<cmath> //floor이용, 버림

using namespace std;

struct person {
	int w0; //다이어트 전 체중
	int l0; //다이어트 전 일일 에너지 섭취량 및 일일 기초 대사량
	int t; //기초 대사량 변화 역치
	int d; //다이어트 기간
	int l; //다이어트 기간 일일 에너지 섭취량
	int a; //다이어트 기간 일일 활동 대사량
};

int main() {
	person de;//데시
	cin >> de.w0 >> de.l0 >> de.t;
	cin >> de.d >> de.l >> de.a;

	//일일 기초 대사량의 변화를 고려하지 않았을 때의
	//다이어트 후 예상 체중(no_change_w)과 일일 기초 대사량을 출력
	int no_change_w = de.w0 + (de.l - de.l0 - de.a) * de.d;

	//데시 사망
	if (no_change_w <= 0)
		cout << "Danger Diet" << '\n';

	else
		cout << no_change_w << ' ' << de.l0 << '\n';

	//-----------------------------------------------
	
	//일일 기초 대사량의 변화를 고려했을 때의
	//다이어트 후 예상 체중과 일일 기초 대사량을 출력
	int change_w = de.w0; //체중
	int change_b = de.l0; //기초 대사량
	int day = de.d;

	while (day--) {
		//체중 변화
		change_w = change_w + (de.l - change_b - de.a);

		if (abs(de.l - change_b - de.a) > de.t) {
			//-5/2 = -2 ....
			//-3이 나와야지 정답
			//floor이용해서 버림
			change_b += floor((float)(de.l - change_b - de.a) / 2);
		}
	}

	//데시 사망
	if (change_b <= 0 || change_w <= 0)
		cout << "Danger Diet" << '\n';

	else {
		cout << change_w << ' ' << change_b << ' ';

		//요요 조건
		if ((de.l0 - change_b - 0) > 0)
			cout << "YOYO" << '\n';
		else
			cout << "NO" << '\n';
		}
	}

출력 결과 잘 나옴...

 

글자에 속아 문제를 잊지 말자

힌트도 꼼꼼히 보자