일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- MySQL
- 서브넷
- 거스름돈
- join
- date_format
- 백준
- debugging
- 브론즈
- Access Modifier
- 자바스크립트 기초
- 클라우드
- docker 개념
- greedy
- reference data type
- 프로그래머스
- Greedy 알고리즘
- DevOps
- docker
- Java
- 탐욕 알고리즘
- 전자레인지 문제
- sqlplus
- SQL
- 알고리즘
- docker image
- 디버깅
- java.io
- Docker 핵심
- 코테
- 그리디 알고리즘
- Today
- Total
나는매일가운데
백준 Greedy 알고리즘 브론즈 전자레인지 본문
1, 문제
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초를 맞추기 위한 최소버튼 조작 방법을 구하는 프로그램을 작성해야 한다.
2. 문제 분석
1) 3개의 시간별로 나눠진 버튼이 존재하고, 주어진 시간에 딱 맞게 버튼을 최소한으로 눌러야한다.
2) 만약 주어진 시간을 정확히 맞출 수 없는 경우는 -1을 출력하
3) 문자열로 출력해야된다.
3) 답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Electrowave {
public static void main(String[] args) throws NumberFormatException, IOException {
// 문제 : T초를 정확히 맞출 수 있는 버튼 클릭최소 횟수
// 1. T초를 정확히 맞춰야 한다 => 못맞추면 -1
// 2. 버튼을 누르는 횟수는 최소로 맞춤 => Greedy 알고리즘 (시간초가 긴것부터 나눠서 횟수 구하기)
int A = 300; // 5분
int B = 60; // 1분
int C = 10; // 10초
int i = 0; // 몫
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int[] buttons = {300, 60, 10};
String numbers = "";
for(int k=0; k<buttons.length; k++) {
i=T/buttons[k];
T %= buttons[k];
numbers += i+" ";
}
if(!(T== 0)) {
numbers = "-1";
}
System.out.println("answer : "+numbers);
}
}
4) 느낀점
- 단순 계산 문제 및 알고리즘 적용 문제이다. Map, Set 등 Collection을 사용하지 않더라도 쉽게 풀 수 있는 문제
- Greedy 알고리즘 문제이다보니 정렬이 핵심인듯 하다... 최소값을 구하는 문제이므로 주어진 값에 최대값을 나눠가며 문제를 풀 수 있었다.
'코테준비 > 백준' 카테고리의 다른 글
Greedy 알고리즘 브론즈 거스름돈 (0) | 2023.07.31 |
---|