본문 바로가기
코드업(CodeUp) 풀이/Python 기초 100제

[코드업 Python 기초 100제] - 6085. 그림 파일 저장용량 계산하기

by yewonnie 2022. 1. 26.

문제 설명

이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다.

가장 기본적인 방법으로는 그림을 구성하는 한 점(pixel, 픽셀)의 색상을
빨강(r), 초록(g), 파랑(b)의 3가지의 빛의 세기 값으로 따로 변환하여 저장하는 것인데,

예를 들어 r, g, b 각 색에 대해서 8비트(0~255, 256가지 가능)씩을 사용한다고 하면,

한 점의 색상은 3가지 r, g, b의 8비트+8비트+8비트로 총 24비트로 표현해서
총 2^24 가지의 서로 다른 빛의 색깔을 사용할 수 있는 것이다.

그렇게 저장하는 점을 모아 하나의 큰 이미지를 저장할 수 있게 되는데,
1024 * 768 사이즈에 각 점에 대해 24비트로 저장하면 그 이미지를 저장하기 위한
저장 용량을 계산할 수 있다.

이렇게 이미지의 원래(raw) 데이터를 압축하지 않고 그대로 저장하는 대표적인 이미지 파일이
*.bmp 파일이며, 비트로 그림을 구성한다고 하여 비트맵 방식 또는 래스터 방식이라고 한다.

이미지의 가로 해상도 w, 세로 해상도 h, 한 픽셀을 저장하기 위한 비트 b 가 주어질 때,
압축하지 않고 저장하기 위해 필요한 저장 용량을 계산하는 프로그램을 작성해 보자.

예를 들어
일반적인 1024 * 768 사이즈(해상도)의 각점에 대해
24비트(rgb 각각 8비트씩 3개)로 저장하려면
1024 * 768 * 24 bit의 저장공간이 필요한데,
1024*768*24/8/1024/1024 로 계산하면 약 2.25 MB 정도가 필요하다.

실제 그런지 확인하고 싶다면, 간단한 그림 편집/수정 프로그램을 통해 확인할 수 있다.

입력

w, h, b 가 공백을 두고 입력된다.
단, w, h는 모두 정수이고 1~1024 이다. b는 40이하의 4의 배수이다.

출력

필요한 저장 공간을 MB 단위로 바꾸어 출력한다.
단, 소수점 셋째 자리에서 반올림하여 둘째 자리까지 출력한다.

입력 예시

1024 768 24

출력 예시

2.25 MB

My code

w,h,b = map(int,input().split())

result = (w*h*b)/8/1024/1024
print(format(result,'.2f'),'MB')

Answer

w,h,b = input().split()
res=int(w)*int(h)*int(b)/1024/1024/8

print('%.2f'%res,"MB")

Code Review

w, h, b 가 공백을 두고 입력되었을 때 필요한 저장 용량은 w*h*b 로 계산할 수 있습니다. 이러한 계산 결과를 MB 의 단위로 바꾸기 위해서는 먼저 byte 로 만들어주기 위해 8을 나눠주고, KB 로 만들어주기 위해 1024를 나눠주고, MB 로 만들어주기 위해 다시 1024를 나눠주면 됩니다. 따라서 이를 계산한 뒤 format 함수를 이용해 소수점 둘째 자리까지의 정확도로 MB 단위와 함께 출력되도록 해주었습니다.
모범 답안처럼 함수를 사용하지 않고도 소수점 둘째 자리까지의 정확도로 출력할 수 있습니다.

댓글