

3과 5를 가지고 수를 구성하는데, 가장 적은 수로 만들기 위해서는 5를 최대한 많이 사용해야한다.
수가 주어졌을 때, 3,6,9,12처럼 바로 나누어떨어지는 경우를 제외하고 나머지가 5보다 작을때까지 계속해서 입력받은 수에서 5를 빼준다.
만약 이 수가 바로 3으로 나누어 떨어진다면 남은 3의 개수를 세주면 되는데, 그렇지 않다면 5를 더하고 다시 한 번 3으로 나누어떨어지는가를 본다.
이 과정을 지속하다 처음 입력한 수와 같은 수가 돼버린다면, 만들 수 없는 수로, -1을 출력해준다.
그리고 총 수를 출력해주면 된다.
num=int(input())
x=num
cnt=0
idx=1
while(idx) :
if(num==3):
break
if(num==6):
break
if(num==9):
break
if(num==12):
break
cnt=cnt+1
num=num-5
if(num<5):
idx=0
idx=1
msg=0
while (idx):
if(num%3==0):
idx=0
while(num):
num=num-3
cnt=cnt+1
break
num=num+5
cnt=cnt-1
if(num==x):
idx=0
msg=-1
if(msg!=-1):
print(cnt)
elif(msg==-1):
print(msg)
코드 너무너무 길다
그래서 다른 사람들 코드를 참고해봤다 !
n = int(input())
print(-(n in [4, 7]) or n-2*n//5*2)
이건 아직 잘 모르겠다..
n = int(input())
cnt = 0
if n % 5 == 0:
print(n // 5)
else:
while True:
if n - 5 < 0 and n - 3 < 0:
print(-1)
break
else:
n -= 3
cnt += 1
if n % 5 == 0:
print(cnt + (n // 5))
break
일단, 5로 나누어떨어지면 바로 출력하면 된다.
그렇지 않다면, n은 3을 빼고 그 횟수를 cnt로 카운팅한다. 그리고 만약 5로 나누어 떨어질 때, 3의 횟수와 5로 나눈 몫을 더해 출력하면 된다.
이 과정을 반복했는데도 나누어떨어지지 않는다면 가능한 경우가 없는 것. 그러므로 -1을 출력한다.
내 코드는 최대한 5를 빼준다음에 다시 올라오는 형식으로 카운팅하는 것인데,
이 코드는 처음 숫자에서 3을 빼가면서 내려가는 형식으로 카운팅하는 것이다.
확실히 내가 처음에 짠 코드보다 이게 더 효율적인 듯 ! (if로 예외처리 해줄 필요가 없어성..)