• toc {:toc}

문제

μ›”λ“œμ „μžλŠ” λ…ΈνŠΈλΆμ„ μ œμ‘°ν•˜κ³  νŒλ§€ν•˜λŠ” νšŒμ‚¬μ΄λ‹€. λ…ΈνŠΈλΆ 판맀 λŒ€μˆ˜μ— 상관없이 λ§€λ…„ μž„λŒ€λ£Œ, μž¬μ‚°μ„Έ, λ³΄ν—˜λ£Œ, κΈ‰μ—¬ λ“± Aλ§Œμ›μ˜ κ³ μ • λΉ„μš©μ΄ λ“€λ©°, ν•œ λŒ€μ˜ λ…ΈνŠΈλΆμ„ μƒμ‚°ν•˜λŠ” λ°μ—λŠ” μž¬λ£ŒλΉ„μ™€ 인건비 λ“± 총 Bλ§Œμ›μ˜ κ°€λ³€ λΉ„μš©μ΄ λ“ λ‹€κ³  ν•œλ‹€.

예λ₯Ό λ“€μ–΄ A=1,000, B=70이라고 ν•˜μž. 이 경우 λ…ΈνŠΈλΆμ„ ν•œ λŒ€ μƒμ‚°ν•˜λŠ” λ°λŠ” 총 1,070λ§Œμ›μ΄ λ“€λ©°, μ—΄ λŒ€ μƒμ‚°ν•˜λŠ” λ°λŠ” 총 1,700λ§Œμ›μ΄ λ“ λ‹€.

λ…ΈνŠΈλΆ 가격이 Cλ§Œμ›μœΌλ‘œ μ±…μ •λ˜μ—ˆλ‹€κ³  ν•œλ‹€. 일반적으둜 생산 λŒ€μˆ˜λ₯Ό 늘렀 κ°€λ‹€ 보면 μ–΄λŠ μˆœκ°„ 총 μˆ˜μž…(νŒλ§€λΉ„μš©)이 총 λΉ„μš©(=κ³ μ •λΉ„μš©+κ°€λ³€λΉ„μš©)보닀 λ§Žμ•„μ§€κ²Œ λœλ‹€. 졜초둜 총 μˆ˜μž…μ΄ 총 λΉ„μš©λ³΄λ‹€ λ§Žμ•„μ Έ 이읡이 λ°œμƒν•˜λŠ” 지점을 손읡뢄기점(BREAK-EVEN POINT)이라고 ν•œλ‹€.

A, B, Cκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 손읡뢄기점을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 A, B, Cκ°€ 빈 칸을 사이에 두고 μˆœμ„œλŒ€λ‘œ μ£Όμ–΄μ§„λ‹€. A, B, CλŠ” 21μ–΅ μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

첫 번째 쀄에 손읡뢄기점 즉 졜초둜 이읡이 λ°œμƒν•˜λŠ” νŒλ§€λŸ‰μ„ 좜λ ₯ν•œλ‹€. 손읡뢄기점이 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ -1을 좜λ ₯ν•œλ‹€.

좜처:https://www.acmicpc.net/problem/1712

풀이

첫 번째 사고

처음 문제λ₯Ό 봀을 λ•Œ νŒŒμ•…ν•œ 뢀뢄은 생산 κ°œμˆ˜μ— λ”°λΌμ„œ κ°€λ³€λΉ„μš©κ³Ό 수읡이 λ³€ν™”ν•œλ‹€λŠ” λΆ€λΆ„μ΄μ—ˆλ‹€. λ•Œλ¬Έμ— κ°€λ³€λΉ„μš©κ³Ό 수읡이 κ°œμˆ˜μ— λ”°λΌμ„œ λ³€ν™”ν•˜λŠ” 뢀뢄을 μˆ˜μ‹μœΌλ‘œ (κ³ μ •λΉ„μš©+(κ°œμˆ˜κ°€λ³€λΉ„μš©)) < (κ°œμˆ˜κ°€κ²©) μ΄λ ‡κ²Œ λ‚˜νƒ€λƒˆλ‹€.

ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ λ‚˜νƒ€λ‚Έ μ•„λž˜ μ½”λ“œλŠ” λ‚΄κ°€ λ°œκ²¬ν•˜μ§€ λͺ»ν•œ 잘λͺ»λœ 뢀뢄이 μžˆλŠ”μ§€ λ°˜λ‘€λ„ μ‘΄μž¬ν•¨κ³Ό λ™μ‹œμ— λŸ°νƒ€μž„μ—λŸ¬λ₯Ό λ™λ°˜ν•œ μ½”λ“œμ˜€λ‹€. μ΄λŠ” 21μ–΅ μ΄ν•˜μ˜ μžμ—°μˆ˜λ‘œ, λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•œλ‹€λ©΄ 21μ–΅λ²ˆ 이상 μ½”λ“œλ₯Ό λ°˜λ³΅ν•  수 있기 λ•Œλ¬Έμ— λŸ°νƒ€μž„μ—λŸ¬κ°€ λ°œμƒν•  수 밖에 μ—†μ—ˆλ‹€.

λ•Œλ¬Έμ— λ‹€λ₯Έ 방법을 생각해봀닀.

#include <iostream>
 
using namespace std;
 
int main()
{
	unsigned int fixV, changeV, sellV, val=1;
	cin >> fixV >> changeV >> sellV;
	while(true)
	{
		if(changeV > sellV)
		{
			cout << -1 << endl;
			break;
		}
		else
		{
			if(fixV + (changeV*val) <= (val*sellV))
			{
				cout << val << endl;
				break;
			}
			val++;
		}
	}
	
	return 0;
}

두 번째 사고

첫 번째 μ‚¬κ³ μ—μ„œ μ μš©ν–ˆλ˜ μˆ˜μ‹μ„ μ •λ¦¬ν•΄λ΄€λ”λ‹ˆ A/(C-B) < 판맀 개수 의 μˆ˜μ‹μ΄ λ‚˜μ™”κ³  이λ₯Ό ν† λŒ€λ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄μ„œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.

#include <iostream>
 
using namespace std;
 
int main()
{
	int fixV, changeV, sellV, val;
	cin >> fixV >> changeV >> sellV;
	
	if((sellV-changeV) <= 0)
		val = -1;
	else
	{
		val = (fixV/(sellV-changeV))+1;
	}
	cout << val << endl;
	
	return 0;
}

μš”μ 

  1. 쑰건이 μ£Όμ–΄μ§„ 경우 μ™œ μ£Όμ–΄μ‘Œμ„μ§€ λ°˜λ“œμ‹œ 생각해보기
  2. μ‹œκ°„λ³΅μž‘λ„ μƒκ°ν•˜κΈ°
  3. μ˜ˆμ™ΈλŠ” μ—†λŠ”μ§€ μƒκ°ν•˜κΈ°