코딩테스트 공부를 하면서 Scanner를 통해서 입력을 받았는데 Buffered를 사용하는 것을 추천해서 익숙해지려고 공부..
Scanner 보다 빠르다.
InputStreamReader 에 버퍼링 기능이 추가된 클래스
입력 스트림에서 문자를 읽는 함수
문자나 배열, 라인들을 효율적으로 읽기 위해 문자들을 버퍼에 저장하고 읽는 방법을 취한다.
버퍼의 사이즈는 사용자가 지정할 수 있으며, 지정하지 않으면 default 사이즈가 적용된다.
InputStreamReader 문자열을 입력받았을 때, Character 단위로 읽는다.. 비효율적! 이기때문에 보완한 것이 BufferedReader
Buffer : 데이터를 전송할 때, 일시적으로 그 데이터를 보관하는 임시메모리 영역
Buffer flush : 버퍼에 남아 있는 데이터를 출력 시킨다.(버퍼를 비운다)
BufferedReader : 버퍼를 이용한 입력
BufferedWriter : 버퍼를 이용한 출력
BOJ 문제를 푼 코드입니다.
import java.io.*;
/*
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
*/
public class Main {
public static void main(String[] args) throws IOException {
// BufferedReader를 사용하기 위해서는 throws IOException을 해 주어야 함.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//Buffer 로 입력 받으면 무조건 String
String input = br.readLine();
//연산을 위해서 String -> int 로 형변환
int year = Integer.parseInt(input);
//입력받은 year에 대해서 1과 4000사이의 자연수가 맞는지 확인하는 함수
checkInput(year);
//윤년인지 아닌지 확인 하는 함수
checkYear(year);
br.close();
}
// 입력 조건에 맞지않은 값이 입력되면 프로그램 종료
private static void checkInput(int year) {
if (year < 0 || year > 4000) {
System.exit(0);
}
}
//윤년인지 아닌지 확인하는 함수, if문의 참인 조건(괄호) 안에는 윤년인이 아닌 경우를 true로 한다.
private static void checkYear(int year) {
if ( year % 4 != 0) { // 4의 배수가 아니라면
System.out.println("0"); // 윤년이 아니다 0 출력
} else if ( year % 100 == 0 && year % 400 !=0) { // 100의 배수 이고 400의 배수가 아니면 윤년이 아니다
System.out.println("0");
} else {
System.out.println("1"); // 그래서 모든 조건을 만족하지 않으면 윤년이다.
}
}
}