18 = 3 x 6 = 5 x 3 + 3 x 1 (4회)
4 ⇒ -1
9 = 3 x 3 (3회)
11 = 5 x 1 + 3 x 2 (3회)
27 = 5 x 3 + 3 x 4 (7회)
32 = 5 x 4 + 3 x 4 (8회)
32(n)에서 5x6=30(num)을 빼준 나머지(mod = 2)가 3의 배수가 아니면 5를 빼준다. (30 → 25)(25 → 20)
나머지(mod)가 3의 배수가 될 때까지 반복 후, 32 - 20(num) = 12(mod)처럼 3의 배수가 되면,
-> num을 5로 나눈 몫과 mod를 3으로 나눈 몫을 합하여 출력.
또는, 계속하여 3의 배수가 나오질 않아 num이 0 이하가 될 경우 (n이 3으로만 구성될 것으로 판단)
-> n을 3으로 나눈 몫을 출력
그래도 3의 배수가 되지 않는다면, 3과 5로 정확하게 표현할 수 없음 (-1)
#설탕 배달
n = num = int(input())
cnt = 0
num = num // 5 * 5
while True:
mod = n - num
if mod % 3 == 0:
cnt += num//5 + mod//3
break
else:
num -= 5
if num <= 0:
num = n
if num % 3 == 0:
cnt += num // 3
break
else:
cnt = -1
break
print(cnt)
뭔가 if문 안에 if문이 두 개나 더 들어간 부분과 실제로 저렇게 단계를 짜는 과정에서 아 이건 좀 아니다아니다하면서
했었다..ㅠㅠ 이런 문제들을 좀 여러 개 풀어보면서 노력해야겠다..!!
n이 5의 배수일 경우, 5로 나눈 몫을 출력
5의 배수가 아닌 경우 n에서 3을 빼준 후, cnt를 하나 올리고, 다시 5의 배수인지 확인 (반복)
n에서 3을 빼주며 계속 5의 배수가 나오지 않는 경우, 음수가 되는 경우엔 3과 5로 표현 불가능(-1)
그렇지 않으면 그대로 3을 빼주며 세어준 cnt출력
#설탕 배달_2
n = int(input())
cnt = 0
while True:
if n % 5 == 0:
cnt += n//5
break
else:
n = n-3
if n<0:
cnt = -1
break
cnt += 1
print(cnt)
반응형