본문 바로가기

백준/C++

[Baekjoon/C++] 1350번 - 진짜 공간

Baekjoon Online Judge

문제로 이동

 

문제

어떤 파일 시스템에는 디스크 공간이 파일의 사이즈와 항상 같지는 않다. 이것은 디스크가 일정한 크기의 클러스터로 나누어져 있고, 한 클러스터는 오직 한 파일만 이용할 수 있기 때문이다.

예를 들어, 클러스터의 크기가 512바이트이고, 600바이트 파일을 저장하려고 한다면, 두 개의 클러스터에 저장하게 된다. 두 클러스터는 다른 파일과 공유할 수 없기 때문에, 디스크 사용 공간은 1024바이트가 된다.

파일의 사이즈와 클러스터의 크기가 주어질 때, 사용한 디스크 공간을 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 파일의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 파일의 크기가 공백을 사이에 두고 하나씩 주어진다. 파일의 크기는 1,000,000,000보다 작거나 같은 음이 아닌 정수이다. 마지막 줄에는 클러스터의 크기가 주어진다. 이 값은 1,048,576보다 작거나 같은 자연수이다.

 

출력

첫째 줄에 사용한 디스크 공간을 출력한다.

 


예제 입력 예제 출력
1
600
512
1024
5
16 32 128 128 0
32768
131072
3
4096 33792 76800
1024
114688
6
0 0 0 0 0 0
8
0

풀이

#include <iostream>
using namespace std;

int main() {
    int N, c; // 파일의 개수 N, 클러스터의 크기 c
    int file[51]; // 파일의 크기

    // 입력
    cin >> N;
    for (int i = 0; i < N; i++)
        scanf("%d", &file[i]);
    cin >> c;

    long long cnt = 0; // 사용 중인 클러스터 수

    // 사용 중인 클러스터 수 구하기
    for (int i = 0; i < N; i++) {
        // 파일 크기가 0이면 클러스터를 사용하지 않는다.
        if (file[i] == 0) continue;

        if (file[i] <= c) cnt++;
        else {
            cnt += (file[i] / c);

            if (file[i] % c != 0) cnt++;
        }
    }

    // 출력
    cout << cnt * c << endl;

    return 0;
}

일단 입력 받은 파일들의 크기를 file[51]에 저장했다.

그 뒤에 각 파일들을 클러스터의 크기로 나눠서 각 파일이 사용 중인 클러스터 수를 계산한 뒤 cnt에 그 값을 더해서 총 사용 중인 클러스터 수를 구했다. 그 뒤 cnt에 저장된 총 사용 중인 클러스터 수에 클러스터의 크기를 곱해서 사용한 디스크 공간을 출력했다.