-

[BOJ - JAVA] 10162 - 전자레인지(그리디 알고리즘) 본문

백준 문제 풀이

[BOJ - JAVA] 10162 - 전자레인지(그리디 알고리즘)

흣차 2021. 10. 25. 04:32
728x90
반응형

# 주소

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

 

10162번: 전자레인지

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

www.acmicpc.net

 

# 문제

 

# 문제 해설 및 코드 리뷰

 

import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int x = 0;
        int  y = 0;
        int z = 0;
        while(true){
            x = n / 300;
            n = n % 300;
            y = n / 60;
            n = n % 60;
            z = n / 10;
            n = n % 10;
            
            if(n == 0) {
                System.out.printf(x + " " + y + " " + z);
                break;
            }
            if(n > 0 || n < 10 || n < 0){
                System.out.println(-1);
                break;
            }
        }

        
    }
}

단순한 그리디 알고리즘 문제입니다. 

그리디의 뜻은 Greedy에서 따온 의미로서 '탐욕적인'이라는 의미를 갖고 있습니다. 

문제 또한 탐욕적으로 풀어(?) 주시면 되는데요. 무슨 의미냐면 전자레인지 버튼의 가장 max 값은 5분입니다.

따라서 5분에 해당하는 값들을 먼저 해치운 뒤, 1분짜리 버튼의 값을 다 헤치우고 남은 값들에 대해 10초 버튼을 처리하시면 되는데요.

while문을 써서 해결합니다. 시간 초과나 메모리 초과가 나는 경우가 많기 때문에 Scanner 보다는 Buffer를 써서 풀이하시는 것을 추천드립니다. 

최대한 시간 초과가 안나게 풀었는데, 이것보다 더 빠르게 풀이하려면 어떤 것이 있을지 궁금하네요!

728x90
반응형
Comments