일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTTP상태
- javascript
- 자바
- ChatGPT
- 개발
- 파이썬
- 서버
- SQLD
- 탐욕알고리즘
- SQLP
- 코딩테스트
- 정렬알고리즘
- 개발자
- 백준
- 네트워크
- API
- 챗지피티
- Spring
- HTTP
- java
- jsp
- SQL
- Python
- 하루코딩
- 알고리즘
- codingtest
- 프로그래머스
- 알고리즘코딩테스트
- JQuery
- 그리디알고리즘
- Today
- Total
개발자's Life
[코딩테스트] Java_ 백준 10162번 전자레인지 (그리디 알고리즘) - Rowen Jobs 본문
백준 10162번 전자레인
생각보다 아주 간단한 문제였다.
주어진 초에 따라 제일 큰 수부터 순서대로 나누고, 나머지 처리 하면 쉽게 풀리는 문제였고
값 계산 안될때 그냥 -1 로 출력해버리면 끝이라 간단히 풀 수 있었다.
(초 계산마다 점수가 있어 그런지 채점속도가 늦었다.)
전자레인지 성공서브태스크
1 초 | 64 MB | 32403 | 19307 | 16635 | 60.272% |
문제
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을 첫 줄에 출력해야 한다.
서브태스크
1 | 30 | T ≤ 60 |
2 | 30 | T ≤ 300 |
3 | 40 | T ≤ 10,000 |
예제 입력 1 복사
100
예제 출력 1 복사
0 1 4
예제 입력 2 복사
189
예제 출력 2 복사
-1
출처
채점 및 기타 정보
- 예제는 채점하지 않는다.
아래는 주석과 함께 작성한 코드이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// 입력값 셋팅
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// 전자렌지 버튼 값 셋팅
int[] microwave_btn = {300, 60, 10};
// 결과 값 변수 선언
int[] microwave_count = new int[3];
// 정확히 계산 되는지 여부에 대한 변수 선언
int chk_cnt = 0;
// 전자렌지 소요 시간 값 셋팅
int T = Integer.parseInt(st.nextToken());
// 버튼 횟수 값 계산
for(int i = 0; i < microwave_btn.length; i++){
// 300, 60 처리
if(i != 2){
// 300, 60 을 나눈 값이 버튼 횟수
microwave_count[i] = T / microwave_btn[i];
// 300, 60 을 나눈 나머지 값이 남은 시간
T = T % microwave_btn[i];
}else{
// 10 처리
if(T % microwave_btn[i] != 0){ // 나눈 나머지(남은 시간) 0이 아닐경우 -1 처리
chk_cnt = -1;
}else{
microwave_count[i] = T / microwave_btn[i]; // 마지막 10초로 나눈 값(버튼횟수) 값 셋팅
}
}
}
// 계산 여부에 따른 결과값 출력
if(chk_cnt == 0){
System.out.printf("%d %d %d", microwave_count[0], microwave_count[1], microwave_count[2]);
}else{
System.out.println(-1);
}
}
}
'코딩테스트 > Test' 카테고리의 다른 글
[코딩테스트] Java_ 백준 1789번 수들의 합 (그리디 알고리즘) - Rowen Jobs (0) | 2023.08.19 |
---|---|
[코딩테스트] Java_ 백준 2217번 로프 (그리디 알고리즘) - Rowen Jobs (0) | 2023.08.18 |
[코딩테스트] Java_ 백준 13305번 주유소 (그리디 알고리즘) - Rowen Jobs (0) | 2023.08.18 |
[코딩테스트] Java_ 백준 5585번 거스름돈 (그리디 알고리즘) - Rowen Jobs (0) | 2023.08.17 |
[코딩테스트] Java_ 백준 1026번 보물 (그리디 알고리즘) - Rowen Jobs (0) | 2023.08.14 |