
✅ 문제
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
조건문과 논리연산자를 이해하기 위한 문제
📥 입력
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
📥 출력
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.
💡 풀이
Scanner 로 입력받아서 연산하는 법과 BufferedReader 로 입력받아서 연산하는 방법 두 가지로 문제를 해결하였다.
조건문으로 if-else문을 사용할 수 있는데 그 길이를 줄이고 싶으면 삼항연산자를 사용해도 무방하다. 나는 논리연산자를 써서 조건을 한줄로 만들어서 풀었다.
|
연산자
|
기능
|
예시
|
|
&&
|
AND
두 항이 모두 참인 경우에만 결과 값이 참이다.
|
n>5 && n!=10
n이 5보다 크고 n이 10이 아닌 경우
|
|
||
(키보드 백스페이스 옆에 있음)
|
OR
두 항 중 하나만 참이면 결과 값이 참이다.
|
n==6 || n==7
n이 6이거나 n이 7인 경우
|
|
!
|
NOT (부정)
참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꾼다.
|
2!=1
2는 1과 같지 않다.
|
✅ 1. Scanner 를 이용한 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
if (year%4==0&&(year%100!=0||year%400==0)) {
System.out.println(1);
} else System.out.println(0);
}
}
윤년 판별의 기준은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때
연도를 4로 나눈 나머지가 0 AND (연도를 100으로 나눈 나머지가 0이 아님 OR 연도를 400으로 나눈 나머지가 0임)
year%4==0&&(year%100!=0||year%400==0)
✅ 2. BufferedReader 를 이용한 풀이
Scanner와 달리 BufferedReader 은 String 타입으로 받기 때문에 정수형을 입력받는 경우Integer.parseInt() 를 써서 int 형으로 변환시켜줘야 하는 과정이 필요하다.
1) if-esle문
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 y = Integer.parseInt(br.readLine());
if(y%4==0) {
if(y%400==0) System.out.println("1");
else if(y%100==0) System.out.println("0");
else System.out.println("1");
}
else System.out.println("0");
}
}
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 y = Integer.parseInt(br.readLine());
System.out.print((y%4==0)?((y%400==0)?"1":(y%100==0)?"0":"1"):"0");
}
}
삼항연산자
[Java]삼항 연산자(조건 연산자)로 불필요한 IF 문 줄이기
삼항연산자란? 삼항 연산자는 피연산자의 갯수가 3개인 조건부 연산자이다. 기본 구문은 아래 그림을 보면 확인할 수 있습니다. 이 연산자는 if-else 구문을 압축한 형태이며, 간결한 코드를 작성
mooonstar.tistory.com
'코딩테스트 > BaekJoon' 카테고리의 다른 글
| [백준] 2884번 알람 시계 - 자바 / java (0) | 2024.04.04 |
|---|---|
| [백준] 14681번 사분면 고르기 - 자바 / java (1) | 2024.04.04 |
| [백준] 9498번 시험성적 - 자바 / java (1) | 2024.04.04 |
| [백준] 1330번 두 수 비교하기 - 자바 / java (2) | 2024.04.02 |
| [백준] 10172번 개 - 자바/java (0) | 2024.04.02 |