1712
문제 | 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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을 출력한다. |
답 | a, b, c = map(int, input().split()) if b >= c: print('-1') else: print(a//(c-b)+1) |
오오 식을 세워야하는 문제가 나왔다!
고정비용 A는 노트북을 몇대를 생산해도 변하지 않는 값이고
가변비용 B는 생산하는 노트북의 개수에 따라 다르다!
손익분기점을 구하려면
고정비용과 가변비용을 합친 값보다 노트북 가격이 커지는 생산대수(x)를 찾으면 된다!
A + Bx < Cx
(B-C)x < -A
(C-B)x > A
x > A / (C - B)
그런데 가변비용 B가 C보다 크면 이익이 발생할 수가 없다!
그러니까 B >= C 이면 -1을 출력해줘야한다
a, b, c = map(int, input().split())
if b >= c:
print('-1')
else:
print(a//(c-b)+1)
2292
문제 | ![]() |
입력 | 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. |
출력 | 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다. |
답 | num = int(input()) hive = 1 count = 1 while num > hive: hive += 6*count count += 1 print(count) |
1, 6, 12, 18, ... 벌집의 둘레가 6씩 증가한다.
그래서 벌집방 개수(hive)를 1개로 두고,
지나가는 방의 개수(count)도 1로 두고,
while 문으로 입력값이 hive 보다 클때 조건문 돌아가게 만들었다.
한번 돌때마다 벌집 둘레가 6씩 증가하니까 6을 더해주고 count 1씩 올려줬는데
num = int(input())
hive = 1
count = 1
while num > hive:
hive += 6
count += 1
print(count)
아니 58을 입력했더니 11이 나오더라..!!
잘못했다. 잘못했다아아아!!!! 6, 12, 18... 이렇게 더해줘야하는데 그냥 6, 6, 6...을 더해준 셈이 아닌가..!!!
다시다시
그럼 6에 count를 곱해주자
num = int(input())
hive = 1
count = 1
while num > hive:
hive += 6*count
count += 1
print(count)
정답~~~~
1193
문제 | ![]() 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. |
입력 | 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. |
출력 | 첫째 줄에 분수를 출력한다. |
답 | n = int(input()) line = 1 while n > line: n -= line line += 1 if line % 2 == 0: up = n down = line - n +1 else: up = line - n + 1 down = n print(up,'/',down,sep="") |
아 규칙찾기가 너무 어렵당
사선마다 규칙이있는걸 어찌저찌 알아냈다
1줄 1/1
2줄 1/2 2/1
3줄 3/1 2/2 1/3
4줄 1/4 2/3 3/2 4/1
5줄 5/1 4/2 3/3 2/4 5/1
...
이렇게!
홀수번째 줄은 분자가 작아지고 분모가 커지고
짝수번째 줄은 분자가 커지고 분모가 작아진다
근데 이걸 가지고 몇번째 수가 뭔지를 어떻게 구하냐는 말이야..
다른분의 코드를 참고했당..
n값을 input으로 받고
첫 라인을 1로 둔다(line = 1)
n이 몇번째 line인지 찾아보자
n이 line 보다 클때 조건문을 돌려주는데
n -= line을 해주고
line+=1 을 한다.
while n > line:
n -= line
line += 1
홀수번째 라인이랑 짝수번째 라인이랑 다르니까 그걸 나눠보자!
if line % 2 == 0:
up = n
down = line - n +1
else:
up = line - n + 1
down = n
최종으로
n = int(input())
line = 1
while n > line:
n -= line
line += 1
if line % 2 == 0:
up = n
down = line - n +1
else:
up = line - n + 1
down = n
print(up,'/',down)
요렇게 했는데 오류가 떴다...!!
print(up, '/', down, sep="") 라고 했더니 성공..
print(f'{up}/{down}')라고 했더니 또 성공.....
뭐야........
2869
문제 | 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. |
입력 | 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) |
출력 | 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. |
답 | A, B, V = map(int, input().split()) if (V - B) % (A - B) == 0: print((V - B) // (A - B)) else: print(((V - B) // (A - B)) + 1) |
처음에 일수(x)를 구할 때 (a-b)x = v로 식을 세웠다가 틀렸다...!!
마지막날 낮에 a만큼 올라가서 정상에 도착하면 안떨어지는 거니까
(a-b)x+b = v로 세워야한다!
(a-b)x = v-b
x = (v-b)/(a-b)
A, B, V = map(int, input().split())
if (V - B) % (A - B) == 0:
print((V - B) // (A - B))
else:
print(((V - B) // (A - B)) + 1)
'알고리즘 > 백준' 카테고리의 다른 글
기본수학2 (1978, 2581) (1) | 2022.09.15 |
---|---|
기본수학1 (10250, 2775, 2839, 10757) (1) | 2022.09.14 |
문자열(1152, 2908, 5622, 2941, 1316) (1) | 2022.09.11 |
문자열(11654, 11720, 10809, 2675, 1157) (0) | 2022.09.10 |
함수(15596, 4673, 1065) (0) | 2022.09.07 |
댓글