[BaekJoon] 2753번 - 윤년 (java)
1. 문제
👉 문제 바로가기
- 조건
시간 제한 | 메모리 제한 |
---|---|
1초 | 128MB |
- 문제
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
- 입력
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
- 출력
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.
- 예제
입력 | 출력 |
---|---|
2000 | 1 |
1999 | 0 |
2. 풀이
- 조건에 따라 윤년인 경우만 1 을 출력해야 하기 때문에
조건문 if
를 사용한다.
연도가 4의 배수
인 경우 중에서,100의 배수가 아닐 때
또는400의 배수일 때
를 찾아야 한다.
그래서 연도가 4의 배수인 if 조건문 안에서조건문을 중첩
하여 윤년인 경우와 그렇지 않은 경우를 찾아낸다. - 또한 if 대신
삼항 연산자
를 사용해서 조건문을 한 줄로 줄이는 방법도 설명한다.
2-1. 4의 배수이면서, 100의 배수가 아닌 경우 → if(연도%100!=0)
2-2. 4의 배수이면서, 400의 배수인 경우 → if(연도%400==0)
2-3. 4의 배수이면서, 100의 배수거나 400의 배수가 아닌 경우 → else
1-2. 4의 배수가 아닌 경우 → else
[짚고 넘어가기!]
조건식 안의 %
는 나머지
를 의미한다.
예를 들어, 연도%4==0 일 때, 연도를 4로 나눈 나머지가 0이면 4의 배수이다.
이제 2가지 입력방법을 사용해서 결과를 출력한다.
- Scanner 클래스
- BufferedReader 클래스
- 1. Scanner 클래스 사용
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
if(A%4==0){
if(A%100!=0 || A%400==0) System.out.println("1");
else System.out.println("0");
}
else System.out.println("0");
}
}
위와같이 객체를 생성할 때, Scanner(System.in) 에서
System.in
은 입력한 값을Byte 단위
로 읽는 것을 뜻한다.
int형을 입력받을 때는
nextInt() 메서드
를 사용한다.
||
는 논리연산자로OR
의 의미이다.
[여기서 잠깐!]
- 2. BufferedReader 클래스 사용
BufferedReader는 readLine()
메서드를 사용해 한 행을 전부 읽는다.
여기서 삼항 연산자도 함께 사용해보자.
변수 = (조건문) ? (true 인 경우 연산) : (false 인 경우 연산)
조건이 2개 이상일 경우, 두번째 연산 위치에 또 다른 삼항 연산자를 쓸 수 있다.
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 A = Integer.parseInt(br.readLine());
System.out.print((A%4==0)?((A%100!=0)?"1":(A%400==0)?"1":"0"):"0");
}
}
readLine()
은 한 줄을 통째로 읽어 String으로 반환하기 때문에Integer.parseInt()
을 사용해int형으로 변환
시켜준다.
삼항 연산자에서 A가 4의 배수이면
삼항 연산자를 중첩해
조건을 체크한다.
[여기서 잠깐!]
BufferedReader 클래스
에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.3. Scanner VS BufferedReader 성능 비교
입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.
관련 페이지
Leave a comment