2021. 8. 10. 23:40ㆍ코딩/Python
* 윤년이란?
- Leap Year. 4년에 한 번씩 생기는 2월 29일
윤년이 생겨난 이유는 실제로 지구가 태양을 한 바퀴 도는데는 365.2422일이 걸린다. 1년을 365일으로만 단정지어버리면 매년 오차 발생 > 달력과 계절이 달라짐 > 오차를 바로잡기 위해 '윤년'이라는 개념이 생겨남
윤년을 구하는 문제는 프로그래밍 언어 문제에서 자주 등장하는 예제이다.
실행 코드
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int year=sc.nextInt(); // 사용자로부터 연도 값을 입력받은 후 int형으로 형변환한다.
if(year>=1 && year<=4000) { // 연도의 범위가 1보다 크거나 같고 4000보다 작거나 같은 자연수여야 하므로 if 조건문을 왼쪽과 같이 설정해준다.
if((year%4==0)&&((year%100!=0)||(year%400==0))){ // 연도는 4의 배수이면서(&&) 100의 배수가 아닐 때(!=) 또는(||) 400의 배수 일 때 이므로 왼쪽과 같이 if문 내의 중첩 if문 작성
System.out.println("1"); // 윤년 연도에 해당하므로 1을 출력한다.
}
else {
System.out.println("0"); // 윤년 연도에 해당하지 않으므로 0을 출력한다.
}
}
else {
System.out.println("숫자 범위에서 벗어났습니다.4000이하의 자연수로 입력하세요"); // 연도의 범위가 1보다 크거나 같지 않고 4000보다 작거나 같은 자연수가 아니면 조건에 부합하는 숫자가 아니므로 다른 수를 입력하도록 한다.
}
sc.close(); // 사용자로부터 Scanner입력을 중단한다.
}
}
실행 결과
또 다른 방법
https://st-lab.tistory.com/23 다른 분의 코드를 참고해보니, 삼항 연산자로도 풀 수 있다고 한다.
삼항 연산자는 생각해보지 못한 방법이었다.
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int year=sc.nextInt(); // 사용자로부터 연도 값을 입력받은 후 integer형으로 형변환한다.
sc.close();
System.out.println((year%4==0)?((year%400==0)?"1":(year%100==0)?"0":"1"):"0");
}
}
확실히 코드가 간결해졌다.
이용한 문법
java.util.Scanner - util 패키지 안에 있는 Scanner 클래스를 이용하여 사용자로부터 값을 입력받는다.
nextInt() - 사용자로부터 입력받은 값을 Integer(정수)형태로 형변환한다.
&& - 관계연산자(AND) 두 조건이 모두 만족해야 해당 조건문이 실행된다.
|| - 관계연산자(OR) 두 조건 중에 하나의 조건만 만족해도 조건문이 실행된다.
삼항 연산자 - 조건식? 피연산자1 : 피연산자2 (if~else if문 대용. 코드를 간결하게 하기 위함)
조건식의 연산결과가 true이면 피연산자 1의 값으로 가고, false이면 피연산자 2의 값으로 간다.
위의 삼항 연산자를 해석해보면 ((year%4==0)?((year%400==0)?"1":(year%100==0)?"0":"1"):"0");
-- 조건식 2개짜리만 보다가 복잡한 조건식은 처음이다.. 나름 해석해보았는데, 혹시 틀린 부분이 있다면 피드백 적극 환영합니다 !
1) (year%4==0)이 true 이면 "1"
2) (year%400=0)이 true 이면 "1")
3) (year%100=0)이 true 이면 "0"
4) (year%100=0)이 false 이면 "1" (100의 배수는 윤년의 조건에 부합하지 않으므로 false로 부정해야 true가 된다)
5) (year%400==0)?"1":(year%100==0)은 false 이므로 "0" (바깥쪽)이 아닐까 싶다..
'코딩 > Python' 카테고리의 다른 글
백준 2739 ) 구구단 (java) (0) | 2021.08.18 |
---|---|
백준 2884 ) 알람 시계 (java) (0) | 2021.08.11 |
백준 14681 ) 사분면 고르기 (java) (0) | 2021.08.11 |
백준 9498 ) 시험 성적 (java) (0) | 2021.08.08 |
백준 1330 ) 두 수 비교하기 (java) (0) | 2021.08.08 |