프로그래밍 문제 풀이/코드업(파이썬)

코드업[CodeUp] Python 기초 100제 [6085번]

태은코딩 2024. 1. 12. 14:03

6085 : [기초-종합] 그림 파일 저장용량 계산하기(py)

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

가장 기본적인 방법으로는 그림을 구성하는 한 점(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

 

정답 및 가능한 정답

w,h,b=map(int,input().split())
print("%.2f"%(w*h*b/8/1024/1024), "MB")
w,h,b = input().split()
res=int(w)*int(h)*int(b)/1024/1024/8

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

 

해설

24비트(rgb 각각 8비트씩 3개)로 저장하려면
1024 * 768 * 24 bit의 저장 공간
bit를 byte로 계산하기 위해 8로 나누고 단위가 MB이므로 1024로 두 번 나눈다. 
w*h*b/8/1024/1024를 계산하고 소수점 2의 자릿수까지 출력한 다음 MB를 공백 두고 출력하라고 했으니
print("%.2f"%(w*h*b/8/1024/1024), "MB")
위와 같은 식을 작성할 수 있다.