문제:

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

 

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

 

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

입력:

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

출력:

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

풀이방법:

파일을 클러스터에 넣으려고 할 떄 크게 3가지 경우가 발생한다.

 

1. 한 파일의 크기가 한 클러스터의 크기보다 큰 경우

2. 한 파일의 크기가 한 클러스터의 크기와 같은 경우

3. 한 파일의 크기가 한 클러스터의 크기보다 작은 경우

 

그리고 위 3가지 case는 몫과 나머지를 통해서 구할 수 있다.

파일사이즈를 클러스터의 크기로 나눴을 때, 몫이 1보다 커지게 된다면 1의 케이스에 해당하며 몫만큼 클러스터의 개수를 준비하고 나머지가 있을 경우 하나 더 준비하면 된다.

그리고 몫이 0이라면 나머지가 있을 경우에는 한 개를 준비하면 되고, 나머지가 없다면 준비안하면 된다.

몫과 나머지를 구할 수 있는 divmod를 사용해서 알고리즘을 구현하면 된다.

1
2
3
4
5
6
7
8
9
10
11
N=int(input())
fileSize=list(map(int,input().split()))
diskSize=int(input())
answer=0
for i in range(N):
    p,r=divmod(fileSize[i],diskSize)
    if r > 0:
        answer+=p+1
    else:
        answer+=p
print(answer*diskSize)
cs

문제링크:

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

 

1350번: 진짜 공간

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

www.acmicpc.net

 

'Algorithm > Python' 카테고리의 다른 글

[BOJ]2468. 안전 영역  (0) 2020.05.19
[BOJ]2167. 2차원 배열의 합  (0) 2020.05.14
[BOJ]5014. 스타트링크  (0) 2020.05.07
[2019 Kakao winter internship]튜플  (0) 2020.04.23
[2019 Kakao winter internship]크레인 인형뽑기 게임  (0) 2020.04.21

문제:

두 정수 N과 F가 주어진다. 지민이는 정수 N의 가장 뒤 두 자리를 적절히 바꿔서 N을 F로 나누어 떨어지게 만들려고 한다. 만약 가능한 것이 여러 가지이면, 뒤 두 자리를 가능하면 작게 만들려고 한다.

 

예를 들어, N=275이고, F=5이면, 답은 00이다. 200이 5로 나누어 떨어지기 때문이다. N=1021이고, F=11이면, 정답은 01인데, 1001이 11로 나누어 떨어지기 때문이다.

 

입력:

첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수다. F는 100보다 작거나 같은 자연수이다.

 

출력:

첫째 줄에 마지막 두 자리를 모두 출력한다. 한자리이면 앞에 0을 추가해서 두 자리로 만들어야 한다.

 

풀이방법:

N을 입력 받은 뒤에 가장 뒤 두 자리를 00으로 만드는 것으로부터 시작한다. 이후 이 값이 F로 나누어지면(나머지가 0이면) 이 값을 출력하고, 나누어지지 않는다면(나머지가 0이 아니라면) F로 나눈 것의 몫에 1을 더한 것에 F를 곱한 것이 최솟값이면서 나누어 떨어지는 수가 된다. 이 때 한자리면 앞에 0을 추가해줘야 하므로 미리 string으로 바꿔서 이를 방지한다.

1
2
3
4
5
6
7
8
n=input()
f=int(input())
n=n[:-2]+'00'
p,r=divmod(int(n),f)
if r==0:
    print(n[-2:])
else:
    print(str(f*(p+1))[-2:])
cs

문제링크:

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

'Algorithm > Python' 카테고리의 다른 글

[BOJ]1629. 곱셈  (0) 2019.10.07
[BOJ]1789. 수들의 합  (0) 2019.10.06
[BOJ]1890. 점프  (0) 2019.10.04
[Programmers]2017 Kakao.다트 게임  (0) 2019.10.02
[Programmers]2018 Kakao.후보키  (0) 2019.10.01

문제:

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

1. 124 나라에는 자연수만 존재합니다.
2. 124 나라에는 모든 수를 표현할 때 1,2,4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

 10진법

124 나라 

10진법 

124 나라 

14 

21 

22

11 

24 

12 

10 

41 


자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.


풀이 방법:

 1~10까지의 예시를 잘 보면 3단위로 맨 오른 쪽 끝의 자리가 1,2,4가 반복 됨을 알 수 있다. 즉 124 나라의 숫자는 3의 나머지와 관련 있다는 것을 알 수 있다. 맨 오른쪽 끝 자리 이외에도 계속 1,2,4가 반복이므로 while문을 사용해서 n이 0이 될 때까지 반복하도록 한다. 이 때 divmod라는 함수를 사용했는데 divmod(a,b)로 사용을 하며 a를 b로 나눈 것의 몫과 나머지를 동시에 반환한다. 나머지가 0일 때, 몫을 1을 줄였는데 그 이유는 10진법의 1,2,3을 보면 십의 자리가 0으로 시작한다고 생각 해야 하기 때문이다. 


1
2
3
4
5
6
7
8
9
10
11
12
def solution(n):
    answer=''
    while n>0:
        n,r=divmod(n,3)
        if r==0:
            answer='4'+answer
            n-=1
        elif r==1:
            answer='1'+answer
        else:
            answer='2'+answer
    return answer
cs


+ Recent posts