본문 바로가기

Algorithm/CodeUp

[CodeUp] 코드업 1086 [기초-종합] 그림 파일 저장 용량 계산하기 - C 언어

반응형
  • 문제 설명 : 이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다. 저장 용량 계산은 해상도 * 24bit이다. 예를 들어 해상도가 1024*768이라면, 1024*768*24bit 이렇게 계산하면 된다.

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

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

  • 입력 예시
    1024 768 24

  • 출력 예시
    2.25 MB

  • 문제 풀이

    1. 1085번 문제에서 모범소스를 보면 입력받는 값들은 자료형을 정수형으로 사용했고, 값을 계산한 결괏값을 저장하고 출력할 변수는 실수형 자료형을 사용한 것을 알 수 있다. 이 방법을 사용하여 코딩을 해 보았다.

    #include <stdio.h>
    
    int main()
    {
        unsigned int w, h, b;
        float mb = 0;
        
        scanf("%d %d %d", &w, &h, &b);
        mb = w * h * b /8 /1024 /1024;
        printf("%.2f MB\n", mb);
        return 0;
    }​

 

→ 출력 값이 2.25가 아닌 2.00이 나왔다. 무엇이 문제인지 파악해 보니, 자료형에는 문제가 없었으나 계산의 위치에 따라서 값이 다르게 저장됨을 알았다. 
   

#include <stdio.h>

int main()
{
    unsigned int w, h, b;
    float mb = 0;

    scanf("%d %d %d", &w, &h, &b);
    mb = w * h * b;
    printf("%.2f MB\n", mb /8 /1024 /1024);
    return 0;
}

 

☆ 결론 
1. 정수형으로 설정된 변수들은 계산 과정과 결과에서 모두 정수형으로만 계산되고 저장됐다.

2. 실수형으로 설정된 변수의 값은 계산 과정과 결과에서 모두 실수형으로 계산되고 저장됐다.

그러므로 원하는 출력물 또는 결과물의 자료형에 맞게 계산의 순서와 위치도 달리 해줘야 한다.

 

  • 내 소스

    #include <stdio.h>
    
    int main()
    {
        float w, h, b;
        float mb = 0;
        
        scanf("%f %f %f", &w, &h, &b);
        mb = w * h * b /8 /1024 /1024;
        printf("%.2f MB\n", mb);
        return 0;
    }​

    - 출력물이 2.00 MB가 나왔을 때, 무엇이 문제인지 제대로 파악이 되지 않아 자료형을 실수형으로 통일하여 결과물을 얻었다.

  • 모범 소스

    #include <stdio.h>
    
    main()
    {
    	int h, b, c, s;
    	double r;
    	scanf("%d %d %d", &h, &b, &s);
    	r = h * b * s;
    	printf("%.2lf MB", r/8/1024/1024);
    
    }​
반응형