티스토리 뷰

이 장애같은 문제에서 시간을 얼마나 날렸는지 모른다. 사실 분기문으로 해결하면 쉬운 문제인데 printf 와 scanf만 사용하도록 제한이 되어있다.

자료형의 형변환과 올림, 반올림, 내림만 확실하게 숙지하고 있다면 쉽게 해결할 수 있는 문제이지만 반올림을 4.9로 해야한다는 함정이 있었다.


문제와 풀이를 살펴보도록 하겠다.


프로그램 명: fuse(open)
제한시간: 1 초

대부분의 사람들은 연구실에 있는 모든 컴퓨터를 가동하면 얼마 만큼의 전기가 소비되는지 를 인식하지 못한다.

퓨즈가 견딜수 있는 한도를 초과하면 퓨즈가 쉽게 녹을수 도 있다.

전기가 얼마나 필요한 지를 계산하는 것은 쉬운 작업이지만 계속 반복하는 것은 아주 따분한 일이다. 이를 계산하는 일을 도와 주는 것이 일이다.

다음은 각 기기가 소비하는 전기량이다.

  • 본체 한대가 소비하는 전류 1.5 amperes
  • 모니터 한대가 소비하는 전류 1.0 amperes
  • 프린터 한대가 소비하는 전류 2.0 amperes
  • 라우터 한대가 소비하는 전류 0.5 amperes

컴퓨터 한대에 하나의 모니터가 있다.

퓨즈는 각 모든 소비 전기의 최소 두 배를 견딜수 있는 것으로 준비해야 한다. 그리고 퓨즈의 용량은 10 , 20 , 30 , ... 10 의 배수 단위로 사용된다.

입력

입력은 세 개의 음이 아닌 정수가 주어진다. 차례대로 컴퓨터 , 프린터 , 라우터의 수이다. 반드시 컴퓨터의 수보다 다른 기기의 수가 적을 필요는 없다.(실험실이니)

모든 수는 100 이하이다.

출력

최소 퓨즈의 용량을 출력 예의 형식으로 출력한다.

입출력 예

입력

10 2 1

출력

60 amperes

입력

5 4 0

출력

50 amperes

입출력 보충

첫 번째 입출력 예에서

  • 컴퓨터의 수가 10 이니 본체의 수와 모니터의 수는 각 10 대 ...(1.5 + 1.0)* 10 = 25
  • 프린터 2 대 ... 2.0 * 2 = 4.0
  • 라우터 1 대 ... 0.5

총 전류의 합 25 + 4.0 + 0.5 = 29.5

퓨즈는 2 배이상이고 10 의 배수단위의 용량을 사용해야 하므로 29.5 * 2 = 59 ---> 60


이 문제를 나는 아래와 같이 풀었다. 조금 조잡한 이유로 문제 해결을 위한 참고용으로만 사용하시라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
 int a, b, c;
 double sum = 0.0;
 int res = 0;
 scanf("%d %d %d",&a,&b,&c);
 
 sum += (a * 2.5);
 sum += (b * 2.0);
 sum += (c * 0.5);
 
 res = sum+4.9;
 res *= 2;
 res /= 10;
 res *= 10;
 
 res -= (res % 10);
 printf("%d amperes",res);
 return 0;
}
cs

먼저 컴퓨터의 댓수와, 프린터, 라우터의 갯수를 입력받을 변수 a,b,c를 순서대로 선언하였다.
다음으로 전체 전력량을 합친 값을 계산하기 위해 sum 변수를 double형으로 선언하였다.
(컴퓨터나 프린터 라우터의 댓수는 실수형이 될 수 없으므로 정수형으로 선언하였고, 계산에는 실수가 들어가기 때문에 sum변수는 실수형 자료형으로 선언하였다)

우선 컴퓨터 한대에 모니터 한개, 본체 한개이기 때문에 두개의 전력량을 더해서 2.5로 계산하였고 나머지도 각각 곱하여 sum변수에 누적시켰다.

그 뒤에 정수형으로 선언해놓은 res변수에 sum+4.9를 저장하였는데, 이는 출력결과가 정수형이고 10의 배수이기 때문이다. 추가적으로 변수를 선언하는 것이 싫다면 출력부분에서 (int)와 같은 방법으로 강제 형변환을 시키거나 %.0d와 같은 방법을 사용해도 결과는 동일하다.

합계값(sum변수)에 4.9를 더한 이유는 반올림을 하기 위해서 인데, 예를들어 testcase에 합계값이 305.5인 경우 A와 235인 경우가 B가 있다. 전력량이 이와 같다면 퓨즈의 값은 각각 620, 470이어야 한다. 이를 적용하지 않고 2를 곱한값에 일의자리를 없애고 10을 더하는등과 같이 처리하면 출력결과는 620, 480과 같이 한쪽이 맞지 않게 된다. 그렇기 때문에 4.9를 더하여 처리하였다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함