11. and, or 혼합
11.1 굉장한 숫자
📌 [기본 개념] and, or 혼합
✔ 여러가지 조건식을 만족하는 조건의 경우, 의미 단위로 소괄호로 묶어주어 사용합니다.
<예시> 숫자 a가 짝수거나 혹은 홀수이면서 동시에 10보다 크다면
숫자 a가 다음 2개 중 하나라도 조건을 만족할까요?
1. a는 짝수
2. a는 홀수이면서 10 이상인 수
1. a % 2 == 0
2. a % 2 == 1 and a >= 10
if a % 2 == 0 or (a % 2 == 1 and a >= 10):
코드1
✔ and는 or 보다 연산자 우선순위가 높아, 먼저 식을 계산합니다.
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 자연수 n이 주어지므로, int(input())을 통해 n에 넣습니다.
📍 위 두 조건 중 하나를 만족해야하므로, 조건식은 다음과 같이 나타낼 수 있습니다.
(홀수이면서 3의 배수인 수) or (짝수이면서 5의 배수인 수)로 나타낼 수 있고,
(홀수인 수 and 3의 배수인 수) or (짝수인 수 and 5의 배수인 수)로 나타낼 수 있습니다.
[코드]
n = int(input())
if (n % 2 != 0 and n % 3 == 0) or (n % 2 == 0 and n % 5 == 0):
print('true')
else:
print('false')
11. 2 숫자의 계절은
📌 [기본 개념] if 조건 나열 순서의 중요성
✔ 조건을 어떤 순서로 나열하는지에 따라 코드의 복잡도가 달라집니다.
또한, if / elif / else 조합을 적절히 잘 활용해야 합니다.
<예시> 다음과 같은 문제가 주어졌을 때
1. a가 홀수면서 5보다 작으면 A를 출력합니다.
2. a가 홀수면서 5보다 같거나 크면 B를 출력합니다.
3. a가 짝수면 C를 출력합니다.
주어진 순서 그대로 코드를 작성하면 다음과 같습니다.
if a % 2 == 1 and a < 5:
print('A')
if a % 2 == 1 and a >= 5:
print('B')
if a % 2 == 0:
print('C')
대신에, a가 짝수인지 아닌지를 먼저 판별한 후, a가 홀수인 경우에 a가 5보다 작은지
판별하면 다음과 같이 간결하게 나타낼 수 있습니다.
if a % 2 == 1 and a < 5:
print('A')
if a % 2 == 1 and a >= 5:
print('B')
if a % 2 == 0:
print('C')
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 월을 나타내는 정수 m이 주어지므로, int(input())을 통해 m에 넣습니다.
📍 Sol 1: 주어진 순서대로 조건을 작성합니다.
📍 Sol 2
1) (m이 12보다 크거나 같다) 또는 (m이 2보다 작거나 같다) → Winter
2) (m이 5보다 작거나 같다) → Spring
3) (m이 8보다 작거나 같다) → Summer
4) (그 외) → Fall
[코드]
Sol 1.
m = int(input())
if 3 <= m <= 5:
print('Spring')
elif 6 <= m <= 8:
print('Summer')
elif 9 <= m <= 11:
print('Fall')
else:
print('Winter')
Sol 2.
m = int(input())
if m >= 12 or m <= 2:
print('Winter')
elif m <= 5:
print('Spring')
elif m <= 8:
print('Summer')
else:
print('Fall')
11.3 장학금
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 중간, 기말고사 점수가 공백을 사이에 두고 차례대로 정수로 주어지므로,
input().split()를 통해 공백을 기준으로 나누고, 이들을 원소로 갖는 리스트를 arr에 넣습니다.
arr의 0, 1번째 원소를 각각 int()로 감싸서 mid, final에 넣습니다.
📍 다음과 같이 and, or 기호를 혼합하여 조건식을 작성합니다.
1) (mid가 90보다 크거나 같다) and (final이 95와 크거나 같다)
2) (mid가 90보다 크거나 같다) and (final이 90보다 크거나 같다)
3) (그 외)
[코드]
arr = input().split()
mid, final = int(arr[0]), int(arr[1])
if mid >= 90 and final >= 95:
print("100000")
elif mid >= 90 and final >= 90:
print("50000")
else:
print("0")
11.4 좀 더 어려운 수학 점수
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 두 줄에 걸쳐서, 각 학생의 수학 점수와 영어 점수가 공백을 사이에 두고 주어지므로
input().split()를 통해 공백을 기준으로 나누고, 이들을 원소로 갖는 리스트를 A, B에 넣습니다.
각 리스트의 0, 1번째 원소를 int()로 감싸서 mA와 eA, mB와 eB에 넣습니다.
📍 문제에서 주어진 조건을 and, or기호를 혼합하여 다음과 같이 나타낼 수 있습니다.
1) (mA가 mB보다 크다) or ((mA와 mB가 같다) and (eA가 eB보다 크다)) → A
2) (그 외) → B
[코드]
A = input().split()
mA, eA = int(A[0]), int(A[1])
B = input().split()
mB, eB = int(B[0]), int(B[1])
if (mA > mB) or ((mA == mB) and (eA > eB)):
print('A')
else:
print('B')
11.5 두 사람
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 두 줄에 걸쳐서, 두 사람의 나이와 성별이 공백을 두고 주어지므로
input().split()를 통해 공백을 기준으로 나누고, 이들을 원소로 갖는 리스트를 A, B에 넣습니다.
각 리스트의 0번째 원소는 int()로, 1번째 원소는 그대로 ageA와 sexA, ageB와 sexB에 넣습니다.
📍 문제에서 주어진 조건을 and, or 기호를 혼합하여 다음과 같이 나타낼 수 있습니다.
1) ((A가 19세 이상이다) and (A가 남성이다)) or ((B가 19세 이상이다) and (B가 남성이다))
2) 그
[코드]
A = input().split()
ageA, sexA = int(A[0]), A[1]
B = input().split()
ageB, sexB = int(B[0]), B[1]
if (int(ageA) >= 19 and sexA == 'M') or (int(ageB) >= 19 and genderB == 'M'):
print(1)
else:
print(0)
'코딩테스트 대비' 카테고리의 다른 글
[코드트리 챌린지] [Novice Low] 5. 단순 반복문(1) - for문 a→b 1씩 증가 (0) | 2023.10.19 |
---|---|
[코드트리 챌린지] [Novice Low] 4. 조건문(12) - 중첩 조건문 (0) | 2023.10.18 |
[코드트리 챌린지] [Novice Low] 4. 조건문(10) - or 기호 (0) | 2023.10.16 |
[코드트리 챌린지] [Novice Low] 4. 조건문(9) - and 기호 (0) | 2023.10.13 |
[코드트리 블로그 챌린지] [Novice Low] 4. 조건문(8) - 비교 연산자와 조건문 (0) | 2023.10.12 |