※ 모든 문제의 저작권은 SW Expert 아카데미에 있습니다. 학습 기록용으로 문제시 삭제하겠습니다.
6254. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 2
다음과 같이 등록된 학생의 이름을 출력하고, 이름을 입력하면 전화번호를 출력해주는
딕셔너리 객체를 이용한 전화번호부 프로그램을 작성하십시오.
[등록된 학생]
홍길동: 010-1111-1111
이순신: 010-1111-2222
강감찬: 010-1111-3333
[프로그램]
아래 학생들의 전화번호를 조회할 수 있습니다.
홍길동
이순신
강감찬
전화번호를 조회하고자 하는 학생의 이름을 입력하십시오.
입력_
이순신
출력_
아래 학생들의 전화번호를 조회할 수 있습니다.
홍길동
이순신
강감찬
전화번호를 조회하고자 하는 학생의 이름을 입력하십시오.
이순신의 전화번호는 010-1111-2222입니다.
[문제 풀이]
dic = {'홍길동': '010-1111-1111',
'이순신': '010-1111-2222',
'강감찬': '010-1111-3333'}
print('아래 학생들의 전화번호를 조회할 수 있습니다.\n홍길동\n이순신\n강감찬\n\
전화번호를 조회하고자 하는 학생의 이름을 입력하십시오.')
name = input()
print(f'{name}의 전화번호는 {dic[name]}입니다.')
6255. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 3
아래의 상품 딕셔너리 데이터를 가격에 따라 내림차순으로 정렬하는 프로그램을 작성하십시오.
"TV": 2000000,
"냉장고": 1500000,
"책상": 350000,
"노트북": 1200000,
"가스레인지": 200000,
"세탁기": 1000000,
출력_
TV: 2000000
냉장고: 1500000
노트북: 1200000
세탁기: 1000000
책상: 350000
가스레인지: 200000
[문제 풀이]
dic = {"TV": 2000000,
"냉장고": 1500000,
"책상": 350000,
"노트북": 1200000,
"가스레인지": 200000,
"세탁기": 1000000,}
# 방법1 람다함수 사용
# 튜플식 리스트로 만들어지며 키,값을 dic에서 가져와 값(item)을 리버스 정렬해 사용
# x[1]이면 값을, x[0]이면 키를 사용
val = sorted(dic.items(), key=lambda x: x[1], reverse=1)
for k, v in val: # 리스트형식이라 그냥 val로 선언해 사용
print(f'{k}: {v}')
# 방법2 딕셔너리 컴프리헨션 사용
# 새 딕셔너리로 만들어지며 키,값을 사용하지만 get을 사용해 값을 리버스 정렬해 사용
dic = {k: dic[k] for k in sorted(dic, key=dic.get, reverse=1)}
for k, v in dic.items(): # 사전형이므로 items()로 선언해 사용
print(f'{k}: {v}')
6256. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 4
다음 두 딕셔너리 객체를 합쳐 중복된 메뉴가 없는 딕셔너리를 만들고
가격이 3000원 이상인 메뉴를 아래와 같이 출력하는 프로그렘을 작성하십시오.
중복된 메뉴의 가격이 다를 경우 딕셔너리 a의 가격을 사용하세요.
a = {'아메리카노': 1900, '카페모카': 3300, '에스프레소': 1900, '카페라떼': 2500, '카푸치노': 2500, '바닐라라떼': 2900}
b = {'헤이즐럿라떼': 2900, '카페모카': 3300, '밀크커피': 3300, '아메리카노': 1900, '샷크린티라떼': 3300}
출력_
{('카페모카', 3300), ('밀크커피', 3300), ('샷크린티라떼', 3300)}
[문제 풀이]
a = {'아메리카노': 1900, '카페모카': 3300, '에스프레소': 1900, '카페라떼': 2500, '카푸치노': 2500, '바닐라라떼': 2900}
b = {'헤이즐럿라떼': 2900, '카페모카': 3300, '밀크커피': 3300, '아메리카노': 1900, '샷크린티라떼': 3300}
# 딕셔너리 합집합으로 a를 기준으로 중복도 삭제해 새 딕셔너리 생성
# a.update(b)해도 가능
menu = a | b
# 딕셔너리 컴프리헨션으로 메뉴아이템에서 값이 3000이상이면 (키, 값)형식으로 출력
dic = {(k,v) for k, v in menu.items() if(v>=3000)}
print(dic)
6257. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 5
리스트의 원소를 키로 하고, 그 원소의 length를 값으로 갖는 딕셔너리 객체를 생성하는 코드를 작성해봅시다.이 때 딕셔너리 내포 기능을 사용하며, 원소의 공백은 제거합니다.
리스트 fruit는 다음과 같습니다. fruit = [' apple ','banana',' melon']
출력_
{'apple': 5, 'banana': 6, 'melon': 5}
[문제 풀이]
fruit = [' apple ','banana',' melon']
# 방법1 strip()으로 공백제거해 딕셔너리의 키와 키의 길이를 값으로 갖게 함
dic = {fruit[k].strip():len(fruit[k].strip()) for k in range(len(fruit))}
print(dic)
# 방법2 replace()로 모든 공백을 제거하고 나머지는 위와 동일
dic = {k.replace(' ', ''): len(k.replace(' ', '')) for k in fruit}
print(dic)
6258. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 6
다음과 같이 정수 N을 입력받아서 1부터 N까지의 정수를 키로 하고,
그 정수의 제곱을 값으로 하는 딕셔너리 객체를 만드는 코드를 작성하십시오.
입력_
5
출력_
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
[문제 풀이]
n = int(input())
# k(키)를 1부터 입력받은 수+1까지 반복하며 값은 키를 제곱한 수를 갖음
dic = {k:k**2 for k in range(1,n+1)}
print(dic)
6259. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 7
다음과 같이 사용자가 입력한 문장에서 숫자와 문자를 구별해 각각의 개수를 출력하는 프로그램을 작성하십시오.
입력_
hello world! 123
출력_
LETTERS 10
DIGITS 3
[문제 풀이]
'''방법1'''
# 문자열로 다 끊어서 리스트에 저장
lst = list(map(str, input()))
n_cnt, w_cnt = 0, 0
for i in lst:
# isalpha()를 사용해 문자면 w_cnt++
if i.isalpha():
w_cnt += 1
# isdigit()를 사용해 숫자면 n_cnt++
elif i.isdigit():
n_cnt += 1
# 형식에 맞게 출력
print(f'LETTERS {w_cnt} \nDIGITS {n_cnt}')
'''방법2'''
string = input()
n_cnt, w_cnt = 0, 0
for i in string:
# A~z까지 i가 포함되면 w_cnt++
if ('A' <= i <='Z') or ('a' <= i <= 'z'):
w_cnt += 1
# 0~9에 i가 포함이면 n_cnt++
elif '0' <= i <= '9':
n_cnt += 1
print(f'LETTERS {w_cnt} \nDIGITS {n_cnt}')
6260. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 8
다음과 같이 사용자가 입력한 문장에서 대소문를 구별해 각각의 갯수를 출력하는 프로그램을 작성하십시오.
입력_
hello world! 123
출력_
UPPER CASE 2
LOWER CASE 8
[문제 풀이]
'''방법1'''
# 문자로 다 끊어서 리스트에 저장
lst = list(map(str, input()))
up_cnt, lo_cnt = 0, 0
for i in lst:
# isalpha()사용해 알파벳만 확인
if i.isalpha():
# upper()사용해 해당 문자가 대문자로 만들었을 때와 같으면 up_cnt++
if i == i.upper():
up_cnt += 1
# lower()사용해 해당 문자가 소문자로 만들었을 때와 같으면 lo_cnt++
elif i == i.lower():
lo_cnt += 1
# 형식에 맞게 출력
print(f'UPPER CASE {up_cnt} \nLOWER CASE {lo_cnt}')
'''방법2'''
# 입력받아 저장
string = input()
up_cnt, lo_cnt = 0, 0
for i in string:
# A~Z까지 i가 포함되면 w_cnt++
if ('A' <= i <='Z'):
up_cnt += 1
# a~z에 i가 포함이면 n_cnt++
elif ('a' <= i <= 'z'):
lo_cnt += 1
print(f'UPPER CASE {up_cnt} \nLOWER CASE {lo_cnt}')
6261. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 9
다음과 같은 기존의 맥주 가격을 5% 인상하려고 할 경우
딕셔너리 내포 기능을 이용한 코드를 작성하십시오.
beer = {'하이트': 2000, '카스': 2100, '칭따오': 2500, '하이네켄': 4000, '버드와이저': 500}
출력_
{'하이트': 2000, '카스': 2100, '칭따오': 2500, '하이네켄': 4000, '버드와이저': 500} # 인상 전
{'하이트': 2100.0, '카스': 2205.0, '칭따오': 2625.0, '하이네켄': 4200.0, '버드와이저': 525.0} # 인상 후
[문제 풀이]
beer = {'하이트': 2000, '카스': 2100, '칭따오': 2500,\
'하이네켄': 4000, '버드와이저': 500}
# beer에서 키와 값을 가져오고 값을 5%인상한 값으로 만들어서 저장
raz_beer = {k:v+(v*0.05) for k,v in beer.items()}
print(beer)
print(raz_beer)
6262. [파이썬 프로그래밍 기초(2) 파이썬의 기본 응용] 3. 자료구조 - 셋, 딕셔너리 10
입력_
abcdefgabc
출력_
a,2
b,2
c,2
d,1
e,1
f,1
g,1
[문제 풀이]
'''방법1'''
# 문자로 끊어서 리스트에 저장
alpha = list(map(str, input()))
# 저장된 리스트에서 같은 문자면 count()를 사용해 리스트에 저장
lst = [alpha.count(i) for i in alpha]
# zip()사용해 딕셔너리로 만들어 중복제거
dic = dict(zip(alpha, lst))
# 형식에 맞게 출력
for k, v in dic.items():
print(f'{k},{v}')
'''방법2'''
alpha = input()
fre = {}
for i in alpha:
# get()사용해 키로 값을 얻어 문자가 같다면 +1해 저장
fre[i] = fre.get(i, 0) + 1
for k, v in fre.items():
print(f'{k},{v}')