1) 문제
2) 풀이
import sys
n = int(sys.stdin.readline())
if n%5 == 0:
num = n//5
elif (n%5) != 0:
if (n%5) == 3:
num = (n//5) + (n%5)//3
elif n >5 and (n%5 ==1 or n%5 == 4):
num = (n//5) -1 + (n%5+5)//3
elif n >10 and n%5 == 2:
num = (n//5) -2 + (n%5 +10)//3
else:
num = -1
print(num)
3) 문법 및 풀이과정
주어진 입력값을 3과 5의 합으로 구성하는데, 이 때 구성할 수 있는 숫자의 최소 개수를 구하라는 문제이다.
봉지의 수가 더 적기 위해서는 최대한 5kg의 봉지를 많이 사용하는 것이 좋다. 따라서 주어진 입력값을 먼저 5로 나눠보는데 이 때 나누어 떨어진다면 이보다 더 적은 봉지 수는 없기에 그대로 그 몫을 출력하면 된다.
5로 나누어 떨어지지 않을 때가 문제인데, 나머지의 값 별로 생각해보자.
- 나머지가 3일 때 : 나머지를 3으로 나누어 그 몫만큼 3kg 봉지를 사용하면 된다.
- 나머지가 1일 때 : 나머지가 1이라고 해서 무조건 3과 5로 구성할 수 없는 수라고 생각해서는 안된다. 1+5=6이므로 3으로 나누어 떨어질 수 있기 때문이다. 즉, 5kg 봉지를 한 개를 덜 가져가고 나머지 1에 덜어낸 5kg을 더하여 총 6kg이 남으므로 3kg봉지를 2개 사용하면 5와 3만 사용한 합의 꼴로 나타낼 수 있다. 이 때, 5kg 봉지를 단 한 개라도 사용했어야 count했던 5kg 봉지들 수에서 1개를 덜어낼 수 있으므로 n>5일 때만 위 방법을 사용할 수 있음을 주의해야 한다.
- 나머지가 2일 때 : 나머지가 2일 때는 10 + 2 = 12로, 5kg봉지 2개를 덜어내고 나머지를 3kg봉지로 채울 수 있다. 이 때도 마찬가지로 n이 최소 10은 넘어야 덜어낼 5kg봉지 2개가 있을 것이므로 이를 조건에 넣어야 한다.
- 나머지가 4일 때 : 4+5=9임을 이용한다.(자세한 과정은 나머지가 1일 때와 동일하다.)
위에 각 상황별로 나눈 계산법을 if문을 활용해 코드를 작성한다.
'Learning-log > Algorithm 문풀' 카테고리의 다른 글
백준(파이썬, python) - 2581번 소수 (2022.11.07) (0) | 2022.11.07 |
---|---|
백준(파이썬, python) - 1978번 소수 찾기 (2022.11.07) (0) | 2022.11.07 |
백준(파이썬, python) - 10250번 ACM호텔(2022.11.06) (0) | 2022.11.07 |
백준(파이썬, python) - 2869번 달팽이는 올라가고 싶다(2022.11.05) (0) | 2022.11.06 |
백준(파이썬, python) - 1193번 분수찾기 (0) | 2022.11.05 |