조건문-3단계_윤년
단계 | 제목 | 설명 | |
---|---|---|---|
2 | 조건문 | if 등의 조건문을 사용해 봅시다. | |
소단계 | 문제번호 | 제목 | |
3 | 2753 | 윤년 | |
윤년을 판별하는 문제 |
문제
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
입력
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
출력
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.
내 제출
A = int(input())
if A % 4 = 0 :
if not A % 100 = 0:
print('1')
elif A % 400 = 0:
print('1')
else :
print('0')
A = int(input())
if A % 4 == 0 :
if not A % 100 == 0:
print('1')
elif A % 400 == 0:
print('1')
else:
print('0')
결과
오답: 컴파일 에러, 틀렸습니다.
수정 제출
A = int(input())
if (A % 4 == 0) and (A % 100 != 0) or (A % 400 == 0) :
print('1')
else:
print('0')
결과
정답
오답 이유
우선 처음의 오답에서는 print 문이 if 문 의 들여쓰기로 입력되어야 합니다.
두번째의 오답의 경우 문법적인 표현은 맞지만 결과값이 틀린 경우입니다.
해당문제는 and 와 or 을 사용하여 푸는것이 맞습니다.
사용된 코드 이론
1. 파이썬 논리 연산자 and, or, not 설명
논리연산이라는 것이 ‘둘중 하나가 참이면 참이다’, ‘둘다 참(true) 이면 이 조건문은 참(true)이다’ 처럼.
조건문이 참(True)인지 거짓(False)인지 판단하는 것을 의미합니다.
그것들을 판단하기 위한 도구로써 파이썬에서는 and, or, not 을 제공해 줍니다.
논리 연산의 참(True) 인지 거짓(False)인지를 알려주기 위해,
파이썬에서 제공하는 and, or, not 의 연산자의 결과는 Bool 타입으로 반환해줍니다.
즉 and, or, not의 결과는 True 아니면 False 로 나오게 됩니다.
1-1) and 연산자
A and B
조건 A 와 조건 B가 모두 참이면 참(True)을 반환합니다.
즉, 조건 A 나 조건 B 중 둘 중 하나라도 거짓이면 거짓(False)를 반환합니다.
당연히 조건 A, B가 둘다 거짓이면 거짓(False)를 반환합니다.
age = 10
name = “block” 이라고 했을때
age >= 9 and name ==”block”
이렇게 조건이 걸리면 age >= 9 가 True 이고 , name도 “block” 이 맞기 때문에
조건 A, B 가 모두 True 이므로 and 연산자의 결과도 True 가 나오게 됩니다.
이걸 코드로 보면 이런식으로 됩니다.
age = 10
name = "kim"
if age >= 9 and name == "block":
print("and 연산자 결과 : True")
else:
print("and 연산자 결과 : False")
여기서는 두 조건 age >= 9, name == “block” 이 둘다 true 이므로
print(“and 연산자 결과 : True”) 코드가 실행되게 됩니다.
1-2) or 연산자
A or B
or 연산은 조건 A, B 둘중 하나라도 True 이면 True가 나오게 됩니다.
즉. 둘다 False가 인 경우에만 False 이고, 조건중 하나라도 True 이면 True 입니다.
age = 10
name = “block”
이런 조건이라고 했을때
age = 10
name = "block"
if age >= 9 or name == "kim":
print("or 연산자 결과 : True")
else:
print("or 연산자 결과 : False")
왼쪽 조건인 age >= 9 는 참(True)인 반면,
오른쪽 조건인 name == “kim”은 거짓(False) 임에도 불구하고
print(“or 연산자 결과 : True”) 이쪽 코드를 타게 됩니다.
왼쪽 조건이 참이기 때문에 or 연산의 결과는 True 가 나오게 됩니다.
1-3) not 연산자
not A
not 조건은 조건을 반대로 해석하면 됩니다.
A가 거짓이라면 참(True)를 반환하고
A가 참이라면 거짓(False)를 반환합니다.
age = 10
if not age >= 9:
print("not 연산자 결과 : True")
else:
print("not 연산자 결과 : False")
코드를 보면 age >= 9 이 조건문은 분명히 True 인데, 앞에 not 을 붙여기 때문에 False가 반환이 되게 됩니다.
그렇기 때문에 코드 실행의 결과는 “not 연산자 결과 : False”가 나오게 됩니다.
1-4) and, or, not 연산자 한눈에 정리
and 연산
**True and True => True**
True and False => False
False and True => False
False and False => False
or 연산
**True or True => True**
True or False => True
False or True => True
False or False => False
not 연산
**not True => False
not False => True**
비교 연산자 (Comparison Operators):
a = 10, b = 20 이라 가정한다.
Operator | Description | Example |
---|---|---|
== | 값이 동일하다 | (a == b) → false |
!= | 값이 동일하지 않다 | (a != b) → true |
> | 왼쪽 값이 오른쪽 값보다 크다 | (a > b) → false |
< | 왼쪽 값이 오른쪽 값보다 작다 | (a < b) → true |
>= | 왼쪽 값이 오른쪽 값보다 크거나 동일하다 | (a >= b) → false |
<= | 왼쪽 값이 오른쪽 값보다 작거나 동일하다 | (a <= b) → true |