<1단계: 1712>
문제:
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
첫번째 줄에 A,B,C가 공백으로 나누어 입력될 때, 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력하자. 손익분기점이 존재하지 않으면 -1을 출력한다.
소스코드:
A, B, C = map(int, input().split())
t = 1
if C-B <= 0: print('-1')
else:
while(1):
if t * C > A + t * B:
print(t)
break
t += 1
처음에 이렇게 소스코드를 작성했는데 시간 초과 오류가 발생했다...
else문에서 무한루프를 돌리는데 시간이 많이 걸리는 것이라 생각했다.
문제가 오랜시간 동안 해결이 되지 않을 때는 다른 사람들의 코드를 참고할 때가 있다.
그때마다 스스로 부족함을 많이 느끼는 것 같다.
앞으로 분발하기 위해 더 노력해야할 것 같다.
개선한 코드는 다음과 같다.
A, B, C = map(int, input().split())
t = 1
if C-B <= 0: print('-1')
else: print(int(A/(C-B)+1))
입력:
1000 70 170
출력:
11
<2단계: 1712>
문제:
![](https://blog.kakaocdn.net/dn/HPMsf/btrs59oS7mu/ZcbSf5owXkPdmpNrNVNn40/img.png)
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
N을 입력했을 때, 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇개의 방을 지나는지 출력한다.
소스코드:
N = int(input())
t = 0
k = 0
while(True):
if N == 1:
t = 1
break
if 6 * k + 1 >= N: break
else:
k += t
t += 1
print(t)
입력:
58
출력:
5