[BaekJoon] 5532번 - 방학 숙제 (java)

1. 문제

👉 문제 바로가기

- 조건

시간 제한 메모리 제한
1초 128MB


- 문제

상근이는 초등학교에 다닐 때, 방학 숙제를 남들보다 먼저 미리 하고 남은 기간을 놀았다. 방학 숙제는 수학과 국어 문제 풀기이다.

방학은 총 L일이다. 수학은 총 B페이지, 국어는 총 A페이지를 풀어야 한다. 상근이는 하루에 국어를 최대 C페이지, 수학을 최대 D페이지 풀 수 있다.

상근이가 겨울 방학동안 숙제를 하지 않고 놀 수 있는 최대 날의 수를 구하는 프로그램을 작성하시오.



- 입력

한 줄에 하나씩 총 다섯 줄에 걸쳐 L, A, B, C, D가 주어진다. (2 ≤ L ≤ 40, 1 ≤ A, B ≤ 1000, 1 ≤ C, D ≤ 100)
항상 방학 숙제를 방학 기간내에 다 할 수 있는 경우만 입력으로 주어진다.



- 출력

첫째 줄에 상근이가 놀 수 있는 날의 최댓값을 출력한다.



- 예제

  입력      출력  
20
25
30
6
8
15
15
32
48
4
6
7





2. 풀이

Math 클래스의 max() 함수 를 사용해 최댓값 을 구하고,
Math 클래스의 ceil() 함수 를 사용해 소수점 아래를 다 버리고 정수부에 1을 더해준 값 을 구한다.

Math.max(4.6 , 5.1) = 5.1
Math.ceil(3.1) = 4





2개의 입력방식을 사용해서 결과를 출력한다.

  1. Scanner 클래스
  2. BufferedReader 클래스





2-1. Scanner 클래스

import java.util.Scanner;

public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        
        int L = sc.nextInt(); // 방학 일 수
        int A = sc.nextInt(); // 국어 총 페이지
        int B = sc.nextInt(); // 수학 총 페이지
        int C = sc.nextInt(); // 하루에 풀 수 있는 국어 페이지
        int D = sc.nextInt(); // 하루에 풀 수 있는 수학 페이지
        
        double max = Math.max((double)A / (double)C , (double)B / (double)D);
        max = Math.ceil(max);
        
        System.out.println(L - (int)max);
    }
}

위와같이 객체를 생성할 때, Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

int형 데이터를 입력받기 위해 nextInt() 메서드를 사용한다.

Math 클래스의 max() 를 사용해 두 값 중 최댓값 을 구한다.
타입에 주의! 소수점까지 필요하기 때문에 double 형으로 형변환을 하고 계산한다.

Math 클래스의 ceil() 를 사용해 소수점 아래를 버리고 정수에 + 1 한 값 을 구한다.
정수 값을 출력하기 위해 다시 int 형으로 형변환 해준다.



[여기서 잠깐!]

Scanner 에 대해 더 자세히 알고싶다면 여기 를 클릭하세요
Math 클래스의 함수들 에 대해 더 자세히 알고싶다면 여기 를 클릭하세요




2-2. BufferedReader 클래스 사용

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)); 
        
        int L = Integer.parseInt(br.readLine()); // 방학 일 수
        int A = Integer.parseInt(br.readLine()); // 국어 총 페이지
        int B = Integer.parseInt(br.readLine()); // 수학 총 페이지
        int C = Integer.parseInt(br.readLine()); // 하루에 풀 수 있는 국어 페이지
        int D = Integer.parseInt(br.readLine()); // 하루에 풀 수 있는 수학 페이지
        
        double max = Math.max((double)A / (double)C , (double)B / (double)D);
        max = Math.ceil(max);
        
        System.out.println(L - (int)max);
    }
}

readLine() 메서드를 사용해 입력받은 값을 한 줄 통째로 읽어 String 으로 반환한다.

Integer.parseInt()을 사용해 String형을 int형으로 변환시켜준다.



[여기서 잠깐!]

BufferedReader 클래스에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.






3. Scanner VS BufferedReader 성능 비교

image

입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.





관련 페이지

Categories:

Updated:

Leave a comment