반응형
- 문제 설명 : 이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다. 저장 용량 계산은 해상도 * 24bit이다. 예를 들어 해상도가 1024*768이라면, 1024*768*24bit 이렇게 계산하면 된다.
- 입력 : w, h, b 가 공백을 두고 입력된다. 단, w, h는 모두 정수이고 1 ~ 1024이다. b는 40 이하의 4의 배수이다.
- 출력 : 필요한 저장 공간을 MB 단위로 바꾸어 출력한다. 소수점 이하 셋째 자리에서 반올림해 둘째 자리까지 출력한 뒤 MB를 출력한다.
- 입력 예시
1024 768 24 - 출력 예시
2.25 MB - 문제 풀이
1. 1085번 문제에서 모범소스를 보면 입력받는 값들은 자료형을 정수형으로 사용했고, 값을 계산한 결괏값을 저장하고 출력할 변수는 실수형 자료형을 사용한 것을 알 수 있다. 이 방법을 사용하여 코딩을 해 보았다.
#include <stdio.h> int main() { unsigned int w, h, b; float mb = 0; scanf("%d %d %d", &w, &h, &b); mb = w * h * b /8 /1024 /1024; printf("%.2f MB\n", mb); return 0; }

→ 출력 값이 2.25가 아닌 2.00이 나왔다. 무엇이 문제인지 파악해 보니, 자료형에는 문제가 없었으나 계산의 위치에 따라서 값이 다르게 저장됨을 알았다.
#include <stdio.h>
int main()
{
unsigned int w, h, b;
float mb = 0;
scanf("%d %d %d", &w, &h, &b);
mb = w * h * b;
printf("%.2f MB\n", mb /8 /1024 /1024);
return 0;
}

☆ 결론
1. 정수형으로 설정된 변수들은 계산 과정과 결과에서 모두 정수형으로만 계산되고 저장됐다.
2. 실수형으로 설정된 변수의 값은 계산 과정과 결과에서 모두 실수형으로 계산되고 저장됐다.
→그러므로 원하는 출력물 또는 결과물의 자료형에 맞게 계산의 순서와 위치도 달리 해줘야 한다.
- 내 소스
#include <stdio.h> int main() { float w, h, b; float mb = 0; scanf("%f %f %f", &w, &h, &b); mb = w * h * b /8 /1024 /1024; printf("%.2f MB\n", mb); return 0; }
- 출력물이 2.00 MB가 나왔을 때, 무엇이 문제인지 제대로 파악이 되지 않아 자료형을 실수형으로 통일하여 결과물을 얻었다. - 모범 소스
#include <stdio.h> main() { int h, b, c, s; double r; scanf("%d %d %d", &h, &b, &s); r = h * b * s; printf("%.2lf MB", r/8/1024/1024); }
반응형
'Algorithm > CodeUp' 카테고리의 다른 글
[CodeUp] 코드업 1088 [기초-종합] 3의 배수는 통과? - C 언어 (0) | 2021.06.05 |
---|---|
[CodeUp] 코드업 1087 [기초-종합] 여기까지! 이제 그만~ - C 언어 (0) | 2021.06.04 |
[CodeUp] 코드업 1085 [기초-종합] 소리 파일 저장 용량 계산하기 - C 언어 (0) | 2021.06.02 |
[CodeUp] 코드업 1084 [기초-종합] 빛 섞어 색 만들기 - C 언어 (0) | 2021.05.28 |
[CodeUp] 코드업 1083 [기초-종합] 3 6 9 게임의 왕이 되자! - C 언어 (0) | 2021.05.27 |