본문 바로가기
백준

[백준] 10162번 : 전자레인지 – JAVA [자바]

by Hongwoo 2022. 4. 26.
반응형

https://www.acmicpc.net/problem/10162

 

10162번: 전자레인지

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

 

백준 10162번 전자레인지는 브론즈 4 난이도의 수학 및 구현 문제이다. 이 문제에서 태그 된 알고리즘 분류를 보면 그리디 알고리즘도 같이 태그 되어 있지만 그리디는 아직 잘 모르므로 얘기하지 않도록 하겠다.

 

이 문제에서는 전자레인지에 버튼 3개가 달려있다. A, B, C 버튼이 있는데 누르면 각각 5분, 1분, 10초씩 추가된다. 그리고 문제에서는 입력으로 요리시간이 주어진다. 이 요리시간이 주어졌을 때 최소 버튼 조작의 A B C 횟수를 구해야 한다.

 

우선 초로 나타내면 A는 300초, B는 60초, C는 10초이다. 따라서 요리시간을 10으로 나눴을 때 나머지가 존재하면 그 시간을 정확하게 맞출 수 없으므로 -1을 출력해주면 된다.

 

그리고 요리시간이 300 이상이면 300을 빼주고 60 이상이면 60을 빼주고 10 이상이면 10을 빼주면서 각각의 카운트만 새면 된다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {
    static int a;
    static int b;
    static int c;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        a = 0;
        b=0;
        c=0;
        if (n % 10 != 0) {
            System.out.print(-1);
            return;
        }
        f(n);
        System.out.print(a + " " + b + " " + c);

    }

    static void f(int n) {
        if (n == 0) return;
        if (n >= 300) {
            n-= 300;
            a++;
            f(n);
        } else if (n >= 60) {
            n-=60;
            b++;
            f(n);
        } else {
            n-= 10;
            c++;
            f(n);
        }
    }
}

 


  • 후기

이 문제를 통해 오랜만에 재귀 함수를 써봤다.

 

반응형

댓글