월드 전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1070만 원이 들며, 열 대 생산하는 데는 총 1,700만 원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총수입(판매비용)이 총비용(=고정비용+가변비용) 보다 많아지게 된다. 최초로 총수입이 총비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
[입력]
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.
[출력]
첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.
입력예제
출력예제
1000 70 170
11
1000 150 170
501
1000 70 50
-1
1000000000 1000 1001
1000000001
1.input().split()으로 문자열을 여러 개 받아서 리스트를 형성할 수 있다.
2.map()을 통해서 int형태로 바꿔줄 수 있다.
즉,
a, b, c = map(int,input().split())
은 a, b, c에 정수를 받아주는데, 무엇을 받느냐면, input의 값들을 차례 데로 받아주세요~라는 뜻이 된다.
따라서, 다음과 같은 코드로 작성할 수 있다.
a, b, c = map(int,input().split())
if b>=c:
print(-1)
else:
print(int(a/(c-b))+1)
a/(c-b))+1가 나오게 되는 이유에 관해서는 C언어로 만든 코드를 작성한 곳에서 조금 더 자세히 알 수 있다.
월드 전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1070만 원이 들며, 열 대 생산하는 데는 총 1,700만 원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총비용(=고정비용+가변비용) 보다 많아지게 된다. 최초로 총수입이 총비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
[입력]
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.
[출력]
첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.
입력 예제
출력 예제
1000 70 170
11
1000 80 590
2
1000 150 170
501
1000 70 50
-1
1000000000 1000 1001
1000000001
상당히 고생했던 문제이다.
일단 문제를 제대로 이해를 하는데까지는 했다.
또한, 문제를 토대로 다음과 같은 식을 만드는 것까지 가능했다
A + B * i < C * i // 손익분기점
문제는 여기서 나는 코드를 다음과 같이 만들었다.
이게 바로 문제의 코드다...
이 코드의 문제를 Stackoverflow에 질문을 한 결과, 다양한 답변 중에 가장 눈에 띈 답변은 다음과 같다.
One thing that is wrong with your code is complexity. You are doing a loop, as if you have skipped a division lesson in the elementary school. Now if the fixed cost is 1000000000, the variable cost is 1, and the price is 2, how much longer does you program runs compared to that of your friend? Another thing that is wrong with your code is that it contains multiplication, again because you have skipped a division lesson in the elementary school. Multiplying large numbers is dangerous. Try A=1000000000, B=1000 and C=1001. What does your program output? Does it look right?
사실 조금 비꼬는 어투가 있지만, 핵심은 나누기를 하지 않고 곱하기를 해서 문제가 생긴다는 것이다 (아마 이 문제는 오버플로우 일 것이라고 생각된다.)
Every school morning Mirko is woken up by the sound of his alarm clock. Since he is a bit forgetful, quite often he leaves the alarm on on Saturday morning too. That's not too bad though, since he feels good when he realizes he doesn't have to get up from his warm and cozy bed.
He likes that so much, that he would like to experience that on other days of the week too! His friend Slavko offered this simple solution: set his alarm clock 45 minutes early, and he can enjoy the comfort of his bed, fully awake, for 45 minutes each day.
Mirko decided to heed his advice, however his alarm clock uses 24-hour notation and he has issues with adjusting the time. Help Mirko and write a program that will take one time stamp, in 24-hour notation, and print out a new time stamp, 45 minutes earlier, also in 24-hour notation.
Note: if you are unfamiliar with 24-hour time notation yourself, you might be interested to know it starts with 0:00 (midnight) and ends with 23:59 (one minute before midnight).
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.
상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.
이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.
바로 "45분 일찍 알람 설정하기"이다.
이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.
현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.
[입력]
The first and only line of input will contain exactly two integers H and M (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) separated by a single space, the input time in 24-hour notation. H denotes hours and M minutes.
첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다.
입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.
[출력]
The first and only line of output should contain exactly two integers, the time 45 minutes before input time.
첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)