728x90

백준 단계별로 풀어보기 - 기본수학1 문제 2개 python으로 풀기


1712 - 손익분기점

※ 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다. 예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다. 노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다. A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.

a, b, c = map(int, input().split())
if b >= c: print(-1)
else: print(int(a/(c-b) + 1))

풀이 : 처음에는 생산 대수(n)를 1부터 시작해서 c * n - (a + b * n)이 0보다 커지는 시점을 찾기 위한 코드를 짰었다. 해당 코드도 문제는 없지만 구해야하는 n이 지나치게 큰 수인 경우 시간이 오래걸린다는 단점이 있었다. 그래서 해당 식을 다시 살펴본 결과 c * n - (a + b * n) > 0 을 만족하는 가장 작은 n을 찾는것이 목표이므로 식을 다시 정리하였을 때

n > (a / (c - b))와 같은 식이 나왔다. 해당 식을 만족시키는 가장 작은 정수 n은 a를 c-b로 나는 몫에 +1을 한것이다.


2292 - 벌집

 

※ 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

n = int(input())
i = 1; finish = False
while (not finish):
  if n == 1:
    print(1); finish = True
  elif (3*i*(i-1)+2 <= n and n < 3*i*(i+1)+2):
    print(i+1);
    finish = True
  i += 1

풀이 : 1부터 목적지 까지의 거리에 따라 숫자들을 나누어보면 1 / 2 - 7 / 8 - 19 / 20 - 37 / 38 - 61 / ... 이다. 1을 제외한 각 구간의 처음 숫자를 나열해보면 2, 8, 20, 38, ...이고 이 숫자들의 차는 각각 6, 12, 18, ...이다. 즉 1을 제외한 각 구간의 첫번째 숫자는 공차가 6인 등차수열의 합 + 2라는 것을 확인할 수 있다.

(2 = 0 + 2 / 8 = 6 + 2 / 20 = 12 + 6 + 2 / 38 = 18 + 12 + 6 + 2 / ...)

1을 입력받았을 경우에는 1을 출력하도록 해주고 그 외의 수를 입력받았을 때는 계산 결과에 따른 값을 출력하도록 해준다.

'코딩 공부 > 파이썬' 카테고리의 다른 글

백준 기본수학 1 풀이 - 3  (0) 2022.02.07
백준 기본수학 1 풀이 - 2  (0) 2022.02.03
백준 문자열 풀이 - 2  (0) 2022.01.24
백준 문자열 문제풀이 - 1  (0) 2022.01.20
백준 함수 문제풀이  (0) 2022.01.18

+ Recent posts