[문제] 파이썬 코드를 이용해 자판기 만들기 1. 사용자가 볼 수 있게다음과 같은 음료를 실행창에 표시합니다. 사이다 1,700원 콜라 1,900원 식혜 2,500원 솔의눈 3,000원 2. 사용자에게 어떤 음료를 살것 인지 입력받습니다. 목록에 없을 경우 실행을 종료합니다. ex. 사이다 3. 사용자에게 얼마를 넣을지 입력 받습니다. 지불 금액이 음료 비용보다 작다면 '돈이 부족합니다'를 출력합니다. 4. 사용자는 음료를 구매하고 남은 잔액을 확인합니다. ex. 입력 : 음료 -> 사이다, 돈 -> 2,000원 이면 잔액 300원을 출력합니다.
▶ 문제 풀이1 POINT
key-value 값 dictionary로 저장, key,value 출력시 .items method 사용
[풀이 과정] 1. 딕셔너리 타입으로 저장후 출력함. (`왜?` key, value 쌍으로 저장해야 key 값에 따른 value를 출력 할 수 있으므로)
2-1. 딕셔너리 저장 → items 메서드 사용하여 key, value 쌍 출력
2-2. 딕셔너리 &리스트 혼합문 저장 → for 문으로 key, value 값 출력
#2-1
menu = {
"사이다": 1700
,"콜라": 1900
,"식혜": 2500
,"솔의눈": 3000
}
for key,value in menu.items() :
print(key,value)
#2-2
menu=[{'name':'사이다','price':'1,700원'}
,{'name':'콜라','price':'1,900원'}
,{'name':'식혜','price':'2,500원'}
,{'name':'솔의눈','price':'3,000원'}
]
for m in menu:
n = m['name']
p = m['price']
print(n,p)
[ 피드백 ]
key, value 쌍이므로 dictionary 에 저장하고 출력했고, 두 가지 방법으로 문제를 풀수 있었음. 어떤 방식이 더 적합한지 성능/적합도 측면으로 알아보자.
실행 속도 (딕셔너리 == 리스트) : 저장된 값이 얼마 없기때문에 소수점10자리 까지 비교해도 차이가 없었음 → 데이터 크기가 작을때 두 코드의 속도 차이는 매우 미미
메모리 용량 (딕셔너리 < 리스트) : 딕셔너리가 리스트 보다 메모리 용량을 덜 먹음 (아래 디벨롭 파트에서 상세 설명)
적합도 (딕셔너리 > 리스트) : 데이터 확장이나 순서 유지 등이 필요없으므로 딕셔너리&리스트 혼합문은 과도한 설계로 보임
`결론` : 값이 크지 않고, 값 추가나 조정이 필요 없는 간단한 구문이므로 딕셔너리&리스트 혼합문 보다는 딕셔너리 구문이 더 적합함.
[ 디벨롭 ]
딕셔너리 vs 리스트
: 리스트/ 딕셔너리/ 딕셔너리 & 리스트 혼합 구조를 각각 언제 사용해야 할까?
딕셔너리 : 딕셔너리는 키-값 쌍을 저장하는 해시 테이블로 설계됨. 따라서 고속 데이터 검색과 효율적인 메모리 관리를 할 수있음.
리스트 : 순서를 유지하면서 항목을 저장함. 이때 참조 오버헤드를 추가로 발생시키므로 더 많은 메모리 사용. 즉, 특정 값을 빠르게 검색하거나 조작하는데에는 최적화 되있지 않음.
Hash-table? key-value 쌍을 저장하는 데이터 구조. 데이터를 빠르게 검색,삽입,삭제 할 수 있도록 설계. hashing 개념 사용