728x90

https://www.acmicpc.net/problem/1350

 

1350번: 진짜 공간

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

www.acmicpc.net

 

 

 

[풀이]

 

조건별로 필요할 클러스터 개수 구한 후 클러스터 사이즈와 곱해주면 된다.

 

우선 파일 크기가 클러스터 크기보다 큰 경우의 계산을 수행하기 위해 math 모듈 import 해준다.

이 문제의 핵심은 파일 크기가 클러스터 크기보다 큰 경우 클러스터 몇개가 필요한지 계산하는 것이다.

 

클러스터는 공유가 불가하다 했으므로 1이라도 넘치게 되면 클러스터 크기가 얼마가 되었던간에 하나를 더 써야한다.

그래서 파일 사이즈 / 클러스터 사이즈 의 몫을 올림 처리하여 필요한 클러스터 개수를 구해야 한다.

이때 이용하는 것이 math 모듈의 ceil() 메서드이다.

 

최종적으로 필요한 클러스터 개수를 구했으면, 구한 개수와 사전에 입력해 준 클러스터 사이즈를 곱해주면 된다.   

import math		# ceil() 올림 함수 쓰기 위해 math 모듈 import

N = int(input())
fileSize = list(map(int, input().split()))		# 파일 크기
clusterSize = int(input())		# 클러스터 크기
cnt = 0		# 클러스터 몇개 필요할 지 넣어주는 변수
tmp = 0		

for i in range(len(fileSize)):
  if fileSize[i] <= clusterSize:
    if fileSize[i] == 0:	# 파일 크기가 0인 경우 클러스터 필요 없음 
      cnt += 0
    else: cnt += 1		# 파일 크기가 클러스터 크기보다 작으면 1개만 필요
  elif fileSize[i] > clusterSize: 
    tmp = math.ceil(fileSize[i]/clusterSize)	# 파일 크기가 넘친다면 그만큼의 클러스터가 추가로 필요 이때 클러스터는 공유가 안되므로 나눈 몫을 올림처리		
    cnt += tmp
    tmp = 0

print(cnt*clusterSize)
728x90

+ Recent posts