12. 중첩 조건문
12.1 남녀노소 구분짓기
📌 [기본 개념] 중첩 조건문
✔ if else 조건문 안에 또 다른 조건을 추가하여 작성할 수 있습니다.
안에 있는 조건문을 작성할 때에는 내부 코드 역시 들여쓰기(indent)를 꼭 해줘야 합니다.
1. a가 홀수라면 숫자 a가 10 이상이면 A,
그렇지 않다면 B를 출력합니다.
2. a가 짝수라면 숫자 a가 15 이상이면 C,
그렇지 않다면 D를 출력합니다.
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 성별에 해당하는 정수가 주어지므로, int(input())을 통해 gender에 넣습니다.
📍 두 번째 줄에 나이에 해당하는 자연수가 주어지므로, int(input())을 통해 age에 넣습니다.
📍 문제에서 주어진 조건을 다음과 같이 중첩 조건문을 사용하여 나타낼 수 있습니다.
1) 남자라면
(1) 19세 이상이라면 → MAN
(2) 19세 미만이라면 → BOY
2) 여자라면
(1) 19세 이상이라면 → WOMAN
(2) 19세 미만이라면 → GIRL
[코드]
gender = int(input())
age = int(input())
if gender == 1:
if age >= 19:
print('WOMAN')
else:
print('GIRL')
elif gender == 0:
if age >= 19:
print('MAN')
else:
print('BOY')
12.2 윤년인가
📌 [기본 개념] 조건을 최대한 잘 묶기
✔ 조건을 묶는 방법에 따라서도 코드의 복잡도가 달라집니다.
if / elif / else 조합을 적절히 잘 활용해야합니다.
✔ 다음과 같은 문제가 주어졌을 때
1. a가 홀수라면 숫자 a가 10 이상이면 A,
그렇지 않다면 B를 출력합니다.
2. a가 짝수라면 숫자 a가 15 이상이면 A,
그렇지 않다면 B를 출력합니다.
Sol 1. 주어진 순서 그대로 코드 작성하기
if a % 2 == 1:
if a >= 10:
print('A')
else:
print('B')
else:
if a >= 15:
print('A')
else:
print('B')
Sol 2. A가 출력되어야 하는 조건을 하나로 묶기
if (a % 2 == 1 and a >= 10) or (a % 2 == 0 and a >= 15):
print('A')
else:
print('B')
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 연도가 자연수로 주어지므로, int(input())을 통해 y에 넣습니다.
📍 Sol 1: 중첩 조건문을 사용하여 다음과 같이 나타낼 수 있습니다.
y가 4로 나누어 떨어진다면
y가 100으로 나누어 떨어진다면
y가 400으로 나누어 떨어진다면
윤년이다
윤년이 아니다
윤년이 아니다
y가 4로 나누어 떨어지지 않는다면
윤년이 아니다
y = int(input())
if y % 4 == 0:
if y % 100 == 0:
if y % 400 == 0:
print("true")
else:
print("false")
else:
print("true")
else:
print("false")
📍 Sol 2: 윤년이 되는 조건을 하나로 묶어서 다음과 같이 나타낼 수 있습니다.
((y가 4로 나누어 떨어진다) and (y가 100으로 나누어 떨어지지 않는다)) or (y가 400으로 나누어 떨어진다)
윤년이다
(그 외)
윤년이 아니다
y = int(input())
if y % 4 == 0 and (y % 100 != 0 or (y % 100 == 0 and y % 400 ==0)):
print('true')
else:
print('false')
12.3 출력 결과 61
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 if else 문에서 x가 10보다 작은지 판별합니다.
두 번째 if else 문에서 y가 10보다 큰지 판별합니다.
📍 x = 9 이기 때문에 10보다 작으므로 내부 조건문으로 이동합니다.
y = 11이기 때문에 10보가 크므로 if 문 내부로 이동하여 A를 출력합니다.
중첩 조건문을 빠져나온 후 C를 출력합니다.
📍 print( 출력할 내용, end = ' )를 사용했으므로, A와 C가 공백 없이 한 줄로 AC가 출력됩니다.
13.4 일 수 구하기
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 월을 나타내는 정수 n이 주어지므로, int(input())을 통해 n을 넣습니다.
📍 윤년이 아닌 해에 각 월의 일 수는 다음과 같습니다.
1) 31일: 1, 3, 5, 7, 8, 10, 12
2) 30일: 4, 6, 9, 11
3) 28일: 2
📍 다음과 같이 중첩 조건문을 사용하여 각 월의 일 수를 판별합니다.
if (n이 2이다): # 2
28일
elif (n이 7보다 작거나 같다): # 1, 3, 4, 5, 6, 7
if (n이 2로 나누어 떨어지지 않는다): # 1, 3, 5, 7
31일
else: # 4, 6
30 일
else: # 8, 9, 10, 11, 12
if (n이 2로 나누어 떨어지지 않는다): # 9, 11
31일
else: # 8, 10, 12
30일
[코드]
n = int(input())
if n == 2:
print(28)
elif n <= 7:
if n%2 != 0:
print(31)
else:
print(30)
else:
if n%2 != 0:
print(31)
else:
print(20 )
13.5 최댓값 구하기
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 정수 a, b, c가 공백을 사이에 두고 주어지므로
input().split()을 통해 공백을 기준으로 나누고, 이들을 원소로 갖는 리스트를 arr에 넣습니다.
arr의 0, 1, 2번째 원소를 각각 int()로 감싸서 a, b, c에 넣습니다.
📍 Sol 1: 다음과 같이 중첩 조건문을 사용하여 세 정수 중 최댓값을 판별합니다.
if a가 b보다 크거나 같다: # a >= b
if a가 c보다 크거나 같다: # a >= b >= c
최댓값은 a이다
else: # c > a >= b
최댓값은 c이다
else: # b > a
if b가 c보다 크거나 같다: # b >= c > a
최댓값은 b이다
else: # c > b > a
최댓값은 c이다
arr = input().split()
a, b, c = int(arr[0]), int(arr[1]), int(arr[2])
if a >= b:
if a >= c:
print(a)
else:
print(c)
else:
if b >= c:
print(b)
else:
print(c)
📍 Sol 2: 다음과 같이 각 정수가 최댓값이 되는 조건을 잘 묶어서 판별합니다.
if (a가 b보다 크거나 같다) and (a가 c보다 크거나 같다): # a >= b >= c
a가 최댓값이다
elif (b가 a보다 크거나 같다) and (b가 c보다 크거나 같다): # b >= a >= c
b가 최댓값이다
else: # c >= a >= b
c가 최댓값이다
arr = input().split()
a, b, c = int(arr[0]), int(arr[1]), int(arr[2])
if a >= b and a >= c:
print(a)
elif b >= a and b >= c:
print(b)
else:
print(c)
12.6 코로나 메뉴얼
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 3개의 줄에 걸쳐, 각 줄마다 한 사람의 감기 증상과 체온이 공백을 사이에 두고 주어지므로
각 줄마다 input().split()를 통해 공백을 기준으로 나누고, 이들을 원소로 갖는 리스트를 arr에 넣습니다.
arr의 0번째 원소는 그대로, 1번째 원소를 int()로 감싸서 각각 c, t에 넣습니다.
📍 다음과 같이 중첩 조건문을 사용하여 위급 상황인지 판별합니다.
if 첫 번째 사람이 A이다:
if (두 번째 사람이 A이다) or (세 번째 사람이 A이다):
위급 상황이다
else:
위급 상황이 아니다
else:
if (두 번째 사람이 A이다) and (세 번째 사람이 A이다):
위급 상황이다
else:
위급 상황이 아니다
[코드]
arr = input().split()
c1, t1 = arr[0], int(arr[1])
arr = input().split()
c2, t2 = arr[0], int(arr[1])
arr = input().split()
c3, t3 = arr[0], int(arr[1])
if c1 == 'Y' and t1 >= 37:
if (c2 == 'Y' and t2 >= 37) or (c3 == 'Y' and t3 >= 37):
print("E")
else:
print("N")
else:
if (c2 == 'Y' and t2 >= 37) and (c3 == 'Y' and t3 >= 37):
print("E")
else:
print("N")
13.7 중앙값 구하기
📌 [문제] 링크
📌 [풀이 및 코드]
[풀이]
📍 첫 번째 줄에 3개의 정수가 공백을 사이에 두고 주어지므로
input().split()를 통해 공백을 기준으로 나누고, 이들을 원소로 갖는 리스트를 arr에 넣습니다.
arr의 0, 1, 2번째 원소를 각각 int()로 감싸서 a, b, c에 넣습니다.
📍 다음과 같이 중첩 조건문을 사용하여 중앙값을 판별합니다.
if (a가 b보다 크다): # a > b
if (c가 a보다 크다): # c > a > b
a가 중앙값이다
elif (b가 c보다 크다): # a > b > c
b가 중앙값이다
else: # a > c > b
c가 중앙값이다
else: # b >= a
if (c가 b보다 크다): # c > b >= a
b가 중앙값이다
elif (a가 c보다 크다): # b >= a > c
a가 중앙값이다
else: # b >= c > a
c가 중앙값이다
[코드]
arr = input().split()
a, b, c = int(arr[0]), int(arr[1]), int(arr[2])
if a > b:
if c > a:
print(a)
elif b > c:
print(b)
else:
print(c)
else:
if c > b:
print(b)
elif a > c:
print(a)
else:
print(c)
'코딩테스트 대비' 카테고리의 다른 글
[코드트리 챌린지] [Novice Low] 5. 단순 반복문(2) - for문 a→b 2씩 증가 (0) | 2023.10.20 |
---|---|
[코드트리 챌린지] [Novice Low] 5. 단순 반복문(1) - for문 a→b 1씩 증가 (0) | 2023.10.19 |
[코드트리 챌린지] [Novice Low] 4. 조건문(11) - and, or 혼합 (0) | 2023.10.17 |
[코드트리 챌린지] [Novice Low] 4. 조건문(10) - or 기호 (0) | 2023.10.16 |
[코드트리 챌린지] [Novice Low] 4. 조건문(9) - and 기호 (0) | 2023.10.13 |