gimmickbutreal
[백준/자바] 10162번 해설 - Java 본문
https://www.acmicpc.net/problem/10162
해당 문제는 JSCODE 3기 내손을자바 팀원들과 함께 풀이를 하였고 각자의 코드를 공유함을 밝힌다.
문제
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초를 맞추기 위한 최소버튼 조작 방법을 구하는 프로그램을 작성해야 한다.
문제 해결방안
- 버튼 3개를 각각 300, 60, 10의 배열로 생성한다.
입력
첫 번째 줄에는 요리시간 T(초)가 정수로 주어져 있으며 그 범위는 1 ≤ T ≤ 10,000 이다.
입력 해결방안
- readLine method를 사용하여 문자열로 입력 받는다.
- Integer.parseInt method를 사용하여 받은 문자열을 정수형으로 변환한다.
출력
여러분은 T초를 위한 최소버튼 조작의 A B C 횟수를 첫 줄에 차례대로 출력해야 한다. 각각의 횟수 사이에는 빈 칸을 둔다. 해당 버튼을 누르지 않는 경우에는 숫자 0을 출력해야한다. 만일 제시된 3개의 버튼으로 T초를 맞출 수 없으면 음수 -1을 첫 줄에 출력해야 한다.
출력 해결방안
- 세 수의 공약수인 10으로 나누어 0이 되지 않으면 -1이 출력하도록 한다.
해설
내가 풀이한 코드
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
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String result = "";
int[] arr = {300, 60, 10};
int T = Integer.parseInt(str);
if (T % 10 != 0) {
System.out.println("-1");
} else {
for (int i = 0; i < arr.length; i++) {
result += T / arr[i]+" ";
T %= arr[i];
}
System.out.println(result);
}
}
}
|
cs |
팀원 1
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
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
int btn[] = {300, 60, 10};
int cnt_btn[] = {0, 0, 0};
int i;
// 초를 맞출 수 없을 때
if(T%10 != 0) {
System.out.println(-1);
return;
}
for(i=0; i<3; i++) {
cnt_btn[i] = T / btn[i]; // 5분 -> 1분 -> 10초 버튼 순서로 체크 => 항상 최소값
T -= btn[i]*cnt_btn[i];
// 출력
System.out.print(cnt_btn[i]+" ");
}
}
}
|
cs |
팀원 2
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
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args)
throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
int A,B,C;
if((T % 300 % 60 % 10) == 0){
A = T / 300;
B = (T % 300) / 60;
C = ((T % 300) % 60) / 10;
bw.write(A +" "+ B +" "+ C);
}else{
bw.write("-1");
}
bw.flush();
bw.close();
}
}
|
cs |
'Algorithm > Java' 카테고리의 다른 글
[CS/Java] 정적(Static) 변수 (0) | 2022.07.17 |
---|---|
[Android Studio] 위치 정보 엑세스 권한 요청 (0) | 2022.05.11 |
[자바/생활코딩] 객체 지향 프로그래밍 - 남의 클래스 & 남의 인스턴스 (0) | 2022.03.15 |
[백준/자바] 5585번 해설 - Java (0) | 2022.03.13 |
[백준/자바] 10757번 해설 - Java (0) | 2022.03.05 |