20일차 문제

양진혁·2021년 11월 20일
0

문제풀이

첫번째 문제는 그리디 유형이었고 거스름돈을 효율적으로 줘야하는 문제였다.

타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.

예제 입력 1
380
예제 출력 1
4

타로가 1000엔 지폐를 주었을 때 나머지를 구하면 되는 문제이다.

a = 1000 - int(input())
li = [500, 100, 50, 10, 5, 1]
count = 0
for i in li:
  if a //i >0:
    count += a//i
  else:
    count +=0
  a = a%i
print(count)  

잔돈을 큰 돈부터 리스트에 넣은 후 for문을 이용해서 나누어 떨어지면 몫을 더해주고 아니면 0을 더해준다. 그리고 a를 몫으로 나눈 나머지를 다시 반복한다.

두번째 문제는 전자레인지로
A = 5분, B = 1분, C = 10초의 버튼이 있다.
시간을 입력하면 몇분 몇초인지 리턴하는 문제이다.
예제 입력 1
100
예제 출력 1
0 1 4

만약 나눠지지 않는다면 -1을 출력하면 된다.

n = int(input())
if n % 10 != 0:
    print(-1)
else:
    a,b,c = 0,0,0
    a = n // 300
    b = (n % 300) // 60
    c = (n % 300) % 60 // 10
    print(a, b, c)

먼저 300, 60, 10 즉 맨 마지막 10의 나머지가 0이 아니면 나눠지지 않으므로 -1을 프린트한다.
그게 아니면 a는 300의 몫을, b는 300나머지와 60의 몫을 c는 300, 60의 나머지에서 10의 몫을 출력한다.

0개의 댓글