gimmickbutreal

[백준/자바] 10162번 해설 - Java 본문

Algorithm/Java

[백준/자바] 10162번 해설 - Java

isshosng 2022. 3. 24. 23:59

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

 

10162번: 전자레인지

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

www.acmicpc.net

 

해당 문제는 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 = {3006010};
        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[] = {3006010};
        int cnt_btn[] = {000};
        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