코드업 문제집 파이썬 if~else 1226 : 이번 주 로또
[문제]
지혜는 로또 매니아다.
매주 로또 한장을 사고 토요일이면 대박을 기대하면서 당첨번호를 확인한다.
지혜는 로또 결과가 4등이었는데 확인을 잘못해서 5등인줄 알고 그냥 바꾸기 귀찮아서 버렸었다.
(사실은 다른 줄에 있는 것까지 합쳐서 3개 맞았는데 5등인줄 알았다고 한다.)
이러한 사태가 다시는 일어나지 않게 하기 위해 우리가 프로그램을 만들어 주자.
로또 순위 매기는 방법)
| 등수 | 방법 |
| 1등 | 당첨번호 6개 일치 |
| 2등 | 당첨번호 5개 일치 + 보너스번호 일치 |
| 3등 | 5개 번호 일치 |
| 4등 | 4개 번호 일치 |
| 5등 | 3개 번호 일치 |
| 꽝 | 2개 이하 일치 |
예)
13 23 24 35 40 45 7 ===> 로또 당첨번호 + 보너스 번호
2 6 7 23 40 44 ====> 지혜가 가진 로또 번호
따라서 지혜는 "꽝"
[문제 해설(핵심)]
로또 당첨번호 6개와 보너스 번호 1개가 주어지고,
내가 가진 로또 번호 6개가 주어진다.
내 번호가 당첨번호와 몇 개 일치하는지 확인한 뒤 등수를 출력하면 된다.
- 6개 일치 → 1등
- 5개 일치 + 보너스 번호 일치 → 2등
- 5개 일치 → 3등
- 4개 일치 → 4등
- 3개 일치 → 5등
- 그 외 → 0
주의할 점은 보너스 번호는 일반 당첨번호 개수에 포함하지 않고, 5개가 맞았을 때만 확인한다는 것이다.
[문제 풀이 1 - 변수와 or 사용]
리스트를 사용하지 않고 당첨번호와 내 번호를 각각 변수에 저장한다.
내 번호 하나가 당첨번호 6개 중 하나와 같은지 or를 이용해 직접 비교한다.
같은 번호가 있다면 count를 1 증가시킨다.
이 과정을 내 번호 6개에 대해 반복한다.
5개가 맞았을 경우에는 보너스 번호가 내 번호 중에 있는지 다시 확인한다.
[핵심 흐름]
당첨번호와 내 번호를 각각 변수에 저장
↓
내 번호를 당첨번호 6개와 하나씩 비교
↓
맞을 때마다 count += 1
↓
count에 따라 등수 출력
↓
5개가 맞으면 보너스 번호 확인
[사용된 개념 설명]
or는 여러 조건 중 하나라도 참이면 전체 조건이 참이 된다.
if m1 == a or m1 == b or m1 == c:
위 코드는 m1이 a, b, c 중 하나와 같으면 참이 된다.
[코드]
a, b, c, d, e, f, bonus = map(int, input().split())
m1, m2, m3, m4, m5, m6 = map(int, input().split())
count = 0
if m1 == a or m1 == b or m1 == c or m1 == d or m1 == e or m1 == f:
count += 1
if m2 == a or m2 == b or m2 == c or m2 == d or m2 == e or m2 == f:
count += 1
if m3 == a or m3 == b or m3 == c or m3 == d or m3 == e or m3 == f:
count += 1
if m4 == a or m4 == b or m4 == c or m4 == d or m4 == e or m4 == f:
count += 1
if m5 == a or m5 == b or m5 == c or m5 == d or m5 == e or m5 == f:
count += 1
if m6 == a or m6 == b or m6 == c or m6 == d or m6 == e or m6 == f:
count += 1
if count == 6:
print(1)
elif count == 5:
if bonus == m1 or bonus == m2 or bonus == m3 or bonus == m4 or bonus == m5 or bonus == m6:
print(2)
else:
print(3)
elif count == 4:
print(4)
elif count == 3:
print(5)
else:
print(0)
이 방법은 리스트를 배우기 전에도 풀 수 있다는 장점이 있지만, 같은 코드를 여러 번 작성해야 해서 코드가 길어진다.
[문제 풀이 2 - 리스트 + for + in 사용]
당첨번호와 내 번호를 리스트로 입력받는다.
첫 번째 줄의 마지막 값은 보너스 번호이므로
bonus = win[6]
으로 따로 저장한다.
그다음 내 번호를 for문으로 하나씩 확인한다.
for num in my:
현재 번호가 당첨번호 6개 안에 있다면
if num in win[:6]:
count를 증가시킨다.
[핵심 흐름]
당첨번호를 리스트로 입력
↓
보너스 번호 따로 저장
↓
내 번호를 for문으로 하나씩 확인
↓
in으로 당첨번호 안에 있는지 확인
↓
맞은 개수를 세고 등수 출력
[사용된 개념 설명]
in은 어떤 값이 리스트 안에 있는지 확인할 때 사용한다.
a = [1, 2, 3]
if 2 in a:
print("있음")
win[:6]은 당첨번호 리스트의 처음 6개 값만 가져온다.
win = [1, 2, 3, 4, 5, 6, 7]
print(win[:6])
결과
[1, 2, 3, 4, 5, 6]
마지막 값인 보너스 번호는 제외된다.
[코드]
win = list(map(int, input().split()))
my = list(map(int, input().split()))
bonus = win[6]
count = 0
for num in my:
if num in win[:6]:
count += 1
if count == 6:
print(1)
elif count == 5:
if bonus in my:
print(2)
else:
print(3)
elif count == 4:
print(4)
elif count == 3:
print(5)
else:
print(0)
변수와 or를 반복하는 방법보다 코드가 훨씬 짧고 보기 쉽다.
[문제 풀이 3 - 이중 for문 사용]
in을 사용하지 않고 반복문만으로도 번호를 비교할 수 있다.
내 번호 하나를 선택한 뒤 당첨번호 6개를 전부 확인한다.
즉,
for i in range(6):
으로 내 번호를 하나씩 선택하고,
for j in range(6):
으로 당첨번호 6개와 비교한다.
두 번호가 같으면 count를 증가시킨다.
[핵심 흐름]
내 번호 하나 선택
↓
당첨번호 6개와 차례대로 비교
↓
같은 번호가 있으면 count += 1
↓
다음 내 번호도 같은 방식으로 비교
↓
맞은 개수에 따라 등수 출력
[사용된 개념 설명]
이중 for문은 반복문 안에 또 다른 반복문이 있는 형태이다.
for i in range(3):
for j in range(2):
print(i, j)
바깥쪽 반복문이 한 번 실행될 때마다 안쪽 반복문이 전부 실행된다.
이 문제에서는 내 번호 6개와 당첨번호 6개를 서로 비교하기 위해 사용할 수 있다.
[코드]
win = list(map(int, input().split()))
my = list(map(int, input().split()))
bonus = win[6]
count = 0
for i in range(6):
for j in range(6):
if my[i] == win[j]:
count += 1
if count == 6:
print(1)
elif count == 5:
bonus_check = 0
for i in range(6):
if my[i] == bonus:
bonus_check = 1
if bonus_check == 1:
print(2)
else:
print(3)
elif count == 4:
print(4)
elif count == 3:
print(5)
else:
print(0)
이 방법도 정답을 구할 수 있지만, 번호를 서로 여러 번 비교하기 때문에 for + in 방식보다 코드가 조금 복잡하다.
[세 풀이 비교]
변수 + or 방식은 리스트를 배우기 전에도 이해하기 쉽지만 코드가 매우 길어진다.
이중 for문은 반복문의 동작을 연습하기에는 좋지만 모든 번호를 서로 비교해야 한다.
이 문제에서는
for num in my:
if num in win[:6]:
처럼 리스트 + for + in을 사용하는 방식이 가장 간단하고 이해하기 쉬운 풀이라고 볼 수 있다.
'코딩공부 > 코드업 파이썬' 카테고리의 다른 글
| 코드업 문제집 파이썬 if~else 1231 : 계산기 1 (1) | 2026.09.07 |
|---|---|
| 코드업 문제집 파이썬 if~else 1228 : 비만도 측정 1 (0) | 2026.09.07 |
| 코드업 문제집 파이썬 if~else 1218 : 삼각형 판단하기 (0) | 2026.09.07 |
| 코드업 문제집 파이썬 if~else 1214 : 이 달은 며칠까지 있을까? (3) | 2026.09.06 |
| 코드업 문제집 파이썬 if~else 1212 : 삼각형의 성립 조건 (0) | 2026.09.06 |
댓글