[기초-종합] 그림 데이터 저장용량 계산하기(py) [3095 / 0C17] 
Time Limit(Test case) : 1000
(ms)Number of users who solved : 366 Total Tried : 1832
The Champion of this Problem (C++) : gs24107 - 0ms / 154byte
My Best Submission (C++) : N/A
[HSJeon]
Background
본 문제는 python 의 빠른 기초 학습을 위해 설계된 문제로서 python 코드 제출을 기준으로 설명되어 있습니다. ------
가로 해상도를 w
(아주 작은 색 점인 픽셀(pixel)들로 큰 그림을 만든다고 할 때, 가로 방향으로 픽셀의 개수를 의미한다.)
세로 해상도를 h
(세로 방향으로 픽셀의 개수를 의미한다.)
한 픽셀을 저장하는데 사용할 비트 수를 b라고 할 때
(한 픽셀의 색을 저장하기 위해서 RGB 각 색을 8비트씩 24비트로 저장할 수 있다.)
비트맵(bitmap) 방식으로 그림을 저장하기 위해서 필요한 그림 데이터 저장 용량을 계산해 보자.
참고
눈에 보이는 그림(사진, 그래픽 등)을 컴퓨터에 저장하고 처리하기 위해서는
디지털 데이터로 바꾸어 저장해야 한다.
** 사진, 이미지 : 카메라 등으로 직접 찍은 그림
** 그래픽 : 점, 선, 면을 이용해서 그려낸 그림
그림을 저장하는 가장 간단한 방법으로는
가로 세로 크기 등의 정보와 함께 그림을 구성하는 픽셀(pixel)들의 RGB 색상 데이터를 저장하는 것이다.
픽셀들의 색상 데이터는 빨강(red), 초록(green), 파랑(blue) 색의 세기를 색깔별로 나누어 따로 저장할 수 있는데
RGB 각각에 대해서 8비트씩 사용한다고 하면 한 픽셀당 24비트의 저장 용량이 필요하다.
** 인쇄를 위해서 CMYK(cyan, magenta, yellow, key black) 색으로 나누는 저장하는 방법도 있다.
** 보다 정확한 색감 저장을 위해서 다양한 색상 스케일(저장 및 표현방법)이 사용되고 있다.
RGB 각각에 대해서 8비트를 사용하면 R, G, B 각각 0 ~ 255 까지 256가지의 색을 표현할 수 있고
총 256 * 256 * 256 = 16,777,216 가지의 서로 다른 색을 표현할 수 있다.
예를 들어, 1024 * 768 해상도의 그림을 각 픽셀당 24비트를 사용해서 저장하려면
1024 * 768 * 24 bit 의 저장 공간이 필요한데
1024 * 768 * 24 / 8 / 1024 / 1024 로 계산하면 그림 1장당 2.25MB 정도의 저장 용량이 필요하다.
(실제로 확인하고 싶다면 간단한 그림 편집/수정 프로그램을 통해 확인할 수 있다.)
(그림을 저장하는데 필요한 용량이 매우 크기 때문에 jpg 같은 그림 파일이나 mpg, avi 같은 동영상 파일에는 데이터가 압축되어 저장된다.)
(참고 : 동영상의 경우 보통 1초에 약 30장 정도의 그림이 필요하다. 압축하지 않는다면 동영상 저장을 위해 매우 큰 저장 용량이 필요하다.)
각 픽셀들의 데이터로 전체 그림을 저장하는 방식을 비트맵(bitmap) 방식이라고 한다.
** 옛날 모니터 화면에 글씨를 출력하던 방식에서 이름을 따서 래스터(raster) 그래픽 방식이라고 부르기도 한다.
** 점들과 그 점들을 연결하는 직선과 곡선들로 선, 면, 다각형들을 만들어 그림을 저장하는 벡터(vector) 그래픽 방식도 있다.
비트맵 그림 데이터를 저장하는 대표적인 파일로 *.bmp가 있다.
(기본적으로는 비압축이지만 데이터를 압축해서 저장하기도 한다.)
** 저장 용량 단위
8 bit(비트) = 1 byte(바이트)
1024 byte(210 byte) = 1 KB(킬로 바이트) 또는 KiB(키비 바이트)
1024 KB(210 KB) = 1 MB(메가 바이트) 또는 MiB(메비 바이트)
1024 MB(210 MB) = 1 GB(기가 바이트) 또는 GiB(기비 바이트)
1024 GB(210 GB) = 1 TB(테라 바이트) 또는 TiB(테비 바이트)
(* KiB, MiB, GiB, TiB, ... 는 정확하게 210배씩 증가함을 나타내는 단위이다.)
Input
문제에서 설명한정수 w, h, b 값이 스페이스로 분리되어 입력된다.
(1<=w,h<=1024, 4<=b(4의 배수)<=40)
Output
그림 데이터를 저장하기 위해서 필요한 저장 용량을 MB 단위로 바꾸어 출력한다.(단, 소수점 둘째 자리까지 반올림해서 MB 단위까지 스페이스로 분리해서 출력한다.)
IO Example
입력1024 768 24
출력
2.25 MB
Prob Analysis : [Problem Statistics] | [Solution]