본문 바로가기

알고리즘 (Python)/코드업 기초 100제

[CodeUp] 코드업 기초 100제 1086번 풀이 - 파이썬(python)

728x90
반응형

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

시간 제한 : 1초 메모리 제한 : 128 MB

 


 

문제 설명

 

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

가장 기본적인 방법으로는 그림을 구성하는 한 점(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의 저장 용량이 필요하다.

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

입력

 

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

출력

 

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

입력 예시

 

1024 768 24

출력 예시

 

2.25 MB

내 풀이

 

a,b,c=map(int,input().split())

totalbit=a*b*c
totalbyte=totalbit/8
totalkb=totalbyte/1024
totalmb=totalkb/1024

print("%0.2f MB" % totalmb)

모범 답안

 

a,b,c=input().split()

W=int(a)
H=int(b)
B=int(c)

print('%.2f MB' % (W*H*B/8/1024/1024))

해설

 

문제를 이해하면 구현은 쉬운 편입니다. 먼저 세 정수 a, b, c를 int 형으로 입력받습니다.
문제에서 totalbit는 a, b, c의 곱이라고 하였으니 a, b, c의 곱을 totalbit 변수에 대입합니다.
8bit = 1byte 이므로 totalbyte는 totalbit를 8로 나눈 값입니다.
1024byte = 1KB 이므로 totalkb는 totalbyte를 1024로 나눈 값입니다.
1024KB = 1MB 이므로 totalmb는 totalkb를 1024로 나눈 값입니다.
totalmb를 구하였으므로 print() 함수를 이용하여 출력하고, 문자열 포맷 코드 %0.2f (= %.2f)를 사용하여 소수 둘째자리까지 나타내줍니다. 
728x90
반응형