문제1285--[기초-종합] 그림 데이터 저장용량 계산하기(py)

1285: [기초-종합] 그림 데이터 저장용량 계산하기(py)

[만든사람 : 전현석, 최문성(확인), 이준용(확인), 김지혜(그림) (2020)]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

본 문제는 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.25MiB 정도의 저장 용량이 필요하다.
(실제로 확인하고 싶다면 간단한 그림 편집/수정 프로그램을 통해 확인할 수 있다.)
(그림을 저장하는데 필요한 용량이 매우 크기 때문에 jpg 같은 그림 파일이나 mpg, avi 같은 동영상 파일에는 데이터가 압축되어 저장된다.)
(참고 : 동영상의 경우 보통 1초에 약 30장 정도의 그림이 필요하다. 압축하지 않는다면 동영상 저장을 위해 매우 큰 저장 용량이 필요하다.)

각 픽셀들의 데이터로 전체 그림을 저장하는 방식을 비트맵(bitmap) 방식이라고 한다.  
** 옛날 모니터 화면에 글씨를 출력하던 방식에서 이름을 따서 래스터(raster) 그래픽 방식이라고 부르기도 한다.
** 점들과 그 점들을 연결하는 직선과 곡선들로 선, 면, 다각형들을 만들어 그림을 저장하는 벡터(vector) 그래픽 방식도 있다.

비트맵 그림 데이터를 저장하는 대표적인 파일로 *.bmp가 있다.
(기본적으로는 비압축이지만 데이터를 압축해서 저장하기도 한다.)

** 저장 용량 단위
      8 bit(비트)           = 1 byte(바이트)
1024 byte(210 byte) = 1 KiB(키비바이트) 또는 KB(킬로바이트)
1024 KiB(210 KiB)      = 1 MiB(메비바이트) 또는 MB(메가바이트)
1024 MiB(210 MiB)     = 1 GiB(기비바이트) 또는 GB(기가바이트)
1024 GiB(210 GiB)      = 1 TiB(테비바이트) 또는 TB(테라바이트)
(* KiB, MiB, GiB, TiB, ... 는 정확하게 210배씩 증가함을 나타내는 단위이다.)


입력 설명

문제에서 설명한
정수 w, h, b 값이 스페이스로 분리되어 입력된다.
(1<=w,h<=1024, 4<=b(4의 배수)<=40)

출력 설명

그림 데이터를 저장하기 위해서 필요한 저장 용량을 MiB 단위로 바꾸어 출력한다.
(단, 소수점 둘째 자리까지 반올림해서 MiB 단위까지 스페이스로 분리해서 출력한다.) 

입력 예시 Copy

1024 768 24

출력 예시 Copy

2.25 MiB

도움

기초100제(py) v0.85 : 정보교사 커뮤니티 @컴퓨터과학사랑(CSL)
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.

출처/분류