문제 링크

문제 설명

예시

[input]
9 45000

[output]
4 0 5

[input]
20 196000

[output]
-1 -1 -1

[input]
1000 1234000

[output]
14 27 959

[input]
2000 20000000

[output]
2000 0 0

사고의 흐름

모범답안

1. 여기를 누르면 답이 보입니다
def formatChange(arr):
  return " ".join([str(i) for i in arr])

def answer(n, y):
  IMPOSSIBLE = '-1 -1 -1'
  TEN, FIVE, ONE = (10000, 5000, 1000)
  
  # 1만원만 최대로 써도 못만드는 경우
  if a*n < y: return IMPOSSIBLE
  # 목표치가 너무 적어서 1천원 짜리만 써도 못만드는경우
  if c*n > y: return IMPOSSIBLE
  
  maxA = y//TEN
  maxB = y//FIVE
  maxC = y//ONE
  
  if maxA*TEN == y: return formatChange([maxA, 0, 0])
  if maxB*FIVE == y: return formatChange([0, maxB, 0])
  if maxC*ONE == y: return formatChange([0, 0, maxC])
  
  for i in range(maxA, -1, -1):
    iTEN = i*TEN
    maxB = (y-(iTEN))//FIVE
    for j in range(maxB, -1, -1):
      jFIVE = j*FIVE
      m = ((y-(iTEN))-jFIVE)//c
      mONE = m*ONE
      if i+j+m == n and iTEN+jFIVE+mONE == y:
        return str(i) + " " + str(j) + " " + str(m)
      
  return IMPOSSIBLE
  

  n, y = map(int, input().split())
  print(answer(n, y))
2. 여기를 누르면 답이 보입니다