파이썬

[파이썬] 5장 문제 풀이 (자료구조)

Nohsw 2023. 12. 19. 23:36

문제 1: 랜덤으로 쿠폰 당첨 프로그램 만들기

#당첨자 뽑기
#1명은 치킨쿠폰, 3명은 커피쿠폰
#20명 중 무작위 추첨, 중복 허용하지 않음.
#random모듈: shuffle(), sample()함수 활용.

from random import *

#20명의 이름(편의 상 1번부터 20번으로 이름 입력)
user = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
shuffle(user) # user의 리스트를 랜덤으로 섞는 함수 (shuffle)

chickenCoupon = sample(user, 1) #user 리스트 중 랜덤으로 1명 추첨하는 함수 (sample)

#중복을 허용하지 않는 조건으로 추첨된 사람은 리스트에서 제외하기 위해 작성.
setUser = set(user) #setUser 변수를 생성하여 user 리스트를 세트로 변환 후 변수에 저장.
chickenCoupon = set(chickenCoupon) #치킨 쿠폰 변수를 세트로 자료구조 변환.
print("user 리스트: "+str(setUser))

#setUser에서 chickenCoupen 변수 값에 담긴 값 제외 후 user 리스트로 변환.
setUser = setUser - chickenCoupon #중복 당첨이 되지 못하게 하기 위한 코드. 
user = list(setUser) #치킨 쿠폰 당첨된 사람을 제외한 리스트.
coffeeCoupon = sample(user, 3) #user 리스트 중 랜덤으로 3명 추첨하는 함수
print("치킨쿠폰 당첨자 제외한 user 리스트:" +str(user))

print("-- 당첨자 발표 --")
print("치킨 당첨자 : " + str(chickenCoupon))
print("커피 당첨자 : " + str(coffeeCoupon))
print("-- 축하합니다! --")

이제 다시 생각해보니 shuffle함수를 이용하여 랜덤으로 섞였으니 슬라이싱으로 했으면 조금 더 간단한 코드가 나왔을 것 같다. 파이썬에 대해 익숙하지 않다보니 아쉬움이 남는다. 다른 코드로도 연습 해봐야겠다.

 

2번 문제

#2번 문제
#수강신청시스템 중 중복 과목 없애는 프로그램 만들기
#1. 리스트로 관리
#2. 리스트에서 같은 과목이 2번 이상 포함된 경우 1개만 남기고 나머지 삭제.
#3. 출력 시 신청 과목 순서는 변경해도 괜찮다.

subject = ["자료구조", "알고리즘", "자료구조", "운영체제"]
setSubject = set(subject)
subject = list(setSubject)
print(subject)

문제 1번과 다르게 문제 2번은 수월하게 풀었다.

문제 풀이는 subject 변수에서 중복된 과목을 set로 변환하여 없애고 다시 list로 변환하여 출력하게 하였다.

오늘은 5장을 끝으로 1번 문제를 다른 방법으로 풀어보고 쉬도록 해야겠다.