[알고리즘] 백준 14916 (파이썬 풀이)

    728x90

    백준 14916번 - 파이썬

     

    문제

    춘향이는 편의점 카운터에서 일한다.

    손님이 2원짜리와 5원짜리로만 거스름돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야 한다. 거스름돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오.

    예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다.

    입력

    첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.

    출력

    거스름돈 동전의 최소 개수를 출력한다. 만약 거슬러 줄 수 없으면 -1을 출력한다.

     

    문제 풀이

    이 전에 풀었던 문제와 마찬가지로 방법이 똑같다.

    n=int(input())을 통해 거스름돈 액수를 받고,

    while안에서 n이 5로 나누어 떨어질 경우에 count값에 몫을 더하고

    count를 출력하면 된다.

    n이 5로 안나누어떨어진다면 n이 5의 배수가 될 때까지 계속해서 -2를 한다.

    그리고 count는 계속 1씩 증가시킨다.

    이 외의 경우는 마찬가지로 else문에서 -1을 출력하면 된다.

     

    해결 코드

    n = int(input())
    count = 0
    while n>=0:
        if n%5==0:
            count += (n//5)
            print(count)
            break
        n -= 2
        count += 1
    else:
        print(-1)

     

    백준 10162번

     

    문제

    3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 각각 5분, 1분, 10초이다.

    냉동음식마다 전자레인지로 요리해야할 시간 T가 초단위로 표시되어 있다. 우리는 A, B, C 3개의 버튼을 적절히 눌러서 그 시간의 합이 정확히 T초가 되도록 해야 한다. 단 버튼 A, B, C를 누른 횟수의 합은 항상 최소가 되어야 한다. 이것을 최소버튼 조작이라고 한다. 

    만일 요리시간이 100초라고 하면(T=100) B를 1번, C는 4번 누르면 된다. 이와 다르게 C를 10번 눌러도 100초가 되지만 이 경우 10번은 최소 횟수가 아니기 때문이 답이 될 수 없다. 이 경우 B 1번, C 4번, 총 5번이 최소버튼 조작이다. 그리고 T=234와 같이 3개의 버튼으로 시간을 정확히 맞출 수 없는 경우도 있다. 

    여러분은 주어진 요리시간 T초를 맞추기 위한 최소버튼 조작 방법을 구하는 프로그램을 작성해야 한다.

    입력

    첫 번째 줄에는 요리시간 T(초)가 정수로 주어져 있으며 그 범위는 1 ≤ T ≤ 10,000 이다. 

    출력

    여러분은 T초를 위한 최소버튼 조작의 A B C 횟수를 첫 줄에 차례대로 출력해야 한다. 각각의 횟수 사이에는 빈 칸을 둔다. 해당 버튼을 누르지 않는 경우에는 숫자 0을 출력해야한다. 만일 제시된 3개의 버튼으로 T초를 맞출 수 없으면 음수 -1을 첫 줄에 출력해야 한다. 

     

    문제 풀이

    먼저 T를 입력받아야 하므로 t = int(input())을 입력한다.

    A,B,C의 시간을 Atime, Btime, Ctime 의 변수로 저장한다. (Atime=300, Btime=60, Ctime=10)

    각 버튼이 눌린 횟수를 나타내는 a,b,c의 값을 0으로 초기화해준다.

    예외의 경우(3개의 버튼으로 T초를 맞출 수 없는 경우)에 -1을 출력해야 하므로

    if 문에 t가 10으로 나누어떨어지지 않을 시(a,b,c의 최대공약수가 10이므로) -1을 출력하게한다.

    else문에는 값(시간)이 가장 큰 Atime부터 가장 작은 Ctime까지 순차적으로 처리해야 한다.

    횟수를 나타내는 a에 먼저 t // Atime 의 값(몫)을 넣게 되면 a 버튼이 몇 번 눌렸는지 알 수 있다.

    그리고나서 b는 t를 Atime으로 나눈 나머지에 대해서 다시 이 계산을 시행해야 한다.

    똑같이 c도 t를 Atime으로 나누고 Btime으로 나눈 나머지에 대해 이 계산을 시행하면

    a,b,c에 각 버튼이 눌린 횟수가 들어가게 된다.

     

    풀이 코드 

    t = int(input())
    count = 0
    Atime = 300
    Btime = 60
    Ctime = 10
    a=0
    b=0
    c=0

    if t % 10 != 0:
        print(-1)
    else:
        a = t // Atime
        b = (t % Atime) // Btime
        c = (t % Atime % Btime) // Ctime
        print(a, b, c)
    728x90

    댓글