더북(TheBook)

아이디를 섞는 것까지는 크게 다르지 않습니다. 다만, range() 함수를 list()로 바로 감싸서 한 줄을 줄입니다.

치킨 당첨자 1명을 먼저 뽑아서 변수에 저장합니다.

그다음 전체 리스트에서 치킨 당첨자를 제외해야겠죠? 어떻게 하는 게 좋을까요? 세트 자료구조에서 차집합을 배웠는데, 기억나죠? 이를 이용하겠습니다.

remain_users에는 이제 19명만 남았으니 이 중에서 커피 당첨자 3명을 뽑으면 되겠네요.

나머지는 똑같습니다. 치킨 당첨자와 커피 당첨자가 뽑혔으니 그대로 출력만 하면 됩니다.

전체 코드를 정리하면 다음과 같습니다. 실행해서 결과를 비교해 보세요.

from random import *

users = list(range(1, 21)) ------------------------ ➊ range()를 list()로 바로 감싸서 한 줄 줄이기
shuffle(users)
chicken_winner = sample(users, 1) ----------------- ➋ 치킨 당첨자 1명 추첨
remain_users = set(users) - set(chicken_winner) --- ➌ 전체 집합에서 치킨 당첨자 집합 제외
coffee_winners = sample(remain_users, 3) ---------- ➍ 남은 19명 중에서 3명 추첨

print("-- 당첨자 발표 --") ------------------------ ➎ 당첨자 출력
print("치킨 당첨자 : {0}".format(chicken_winner))
print("커피 당첨자 : {0}".format(coffee_winners))
print("-- 축하합니다! --")

이렇게 해서 2가지 방법으로 문제를 풀고 코드를 작성해 봤습니다. 문제 해결을 위한 적절한 방법을 찾아내는 것이 가장 중요하지만, 때로는 유연한 사고로 더 쉬운 접근 방법을 고민해 보는 것도 중요합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.