2023. 2. 10. 17:41ㆍ백준/파이썬
알파벳 대소문자로 된 단어가 주어지면,
이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오.
단, 대문자와 소문자를 구분하지 않는다.
저는 이 문제를 보고
① 처음에 알파벳을 다 소문자로 바꿔두고
words = input().lower()
② key에 알파벳을, value에 알파벳 개수를 넣은 딕셔너리를 생성해야겠다고 생각했습니다.
alpha = dict()
for i in words:
try:
alpha[i] += 1
except:
alpha[i] = 1
③ 그리고 value 중에서 최대값을 알아내서
max_alpha_val = max(alpha.values())
④ 최대값인 value를 가진 key값을 찾고
⑤ 최대값인 value를 가진 key가 두개 이상이면 ?를 출력하고,
⑥ 하나면 그 key를 대문자로 변환해서 출력할 겁니다.
value로 key 불러오기
1) key:value 위치 바꿔주기
1-1. reverse_a = dict(map(reversed, a.items()))
1-2. reverse_a = {v:k for k,v in a.items()}
2) 리스트 컴프리 헨션
[k for k, v in a.items() if v == 1]
>> [ 'm', 'p' ]
1) key:value 위치 바꿔주기
key값과 value값의 위치가 바뀐 딕셔너리를 만들어서
value 값을 key로 사용하여 value의 조건에 해당하는 key를 value처럼 찾아내주겠습니다.
reverse_alpha = dict(map(reversed, alpha.items()))
이렇게 해줬습니다.
여기서 문제가 있는데, 뭘까요?
key는 고유한 값을 가진다는 특징입니다.
예제에 있는 Mississipi를 입력하고 reverse_alpha 딕셔너리를 출력하면,
{1: 'p', 4: 's'} 이런 딕셔너리가 나옵니다.
그러면 이 방법은 틀렸고, 2번 방법을 사용할게요.
2) 리스트 컴프리 헨션
find_key_list = [k for k,v in alpha.items() if v == max(alpha.values())]
리스트를 만들어줬고, 최대값인 value를 value로 가질 때의 key만 리스트에 담아줍니다.
그러면 ④ 최대값인 value를 가진 key값 찾기 완료!
⑤ 최대값인 value를 가진 key가 두개 이상이면 ?를 출력하기
⑥ 하나면 그 key를 대문자로 변환해서 출력하기
if len(find_key_list) >= 2:
print("?")
else:
for j in find_key_list:
print(j.upper())
전부 완료했습니다!
저는 if문 안에 for문을 써도 된다고 합니다.
나의 최종 정답 :
words = input().lower()
alpha = dict()
for i in words:
try:
alpha[i] += 1
except:
alpha[i] = 1
find_key_list = [k for k,v in alpha.items() if v == max(alpha.values())]
if len(find_key_list) >= 2:
print("?")
else:
for j in find_key_list:
print(j.upper())
+ 딕셔너리 공부
key로 value 불러오기
1) .get(key)
a.get('m')
>> 1
※딕셔너리에 존재하지 않는 키로 값을 가져오려고 할 경우
a.get('a')
>> None
존재하지 않는 키를 사용했을 때 None 대신 디폴트 값 설정 가능
a.get('a', 0)
>> 0
2) a['m']
>>1
※딕셔너리에 존재하지 않는 키로 값을 가져오려고 할 경우
a['a']
>>에러가 발생함. keyError
value로 key 불러오기
1) key:value 위치 바꿔주기
1-1. reverse_a = dict(map(reversed, a.items()))
1-2. reverse_a = {v:k for k,v in a.items()}
2) 리스트 컴프리 헨션
[k for k, v in a.items() if v == 1]
>> [ 'm', 'p' ]
사전, Dictionary의 함수들
a = {'m': 1, 'i': 4, 's': 4, 'p': 1 }
.keys() : 키 값만!
a.keys()
>> dict_keys([ 'm', 'i', 's', 'p' ])
dict_keys 객체를 돌려줍니다.
list(a.keys())
>> [ 'm', 'i', 's', 'p' ]
딕셔너리 a에 있는 키값으로만 이루어진 리스트가 출력됩니다.
.values() : 밸류 값만!
a.values()
>> dict_values([ 1, 4, 4, 1 ])
dict_values 객체를 돌려줍니다.
list(a.values())
>> [ 1, 4, 4, 1 ]
딕셔너리 a에 있는 밸류값으로만 이루어진 리스트가 출력됨.
.items() : key, value 쌍으로 얻기!
a.items()
>> dict_items([('m', 1), ('i', 4), ('s', 4), ('p', 1)])
키와 밸류의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려줍니다.
.clear() : 딕셔너리 안의 모든 요소 삭제
a.clear()
in : 해당 key가 딕셔너리 안에 있는지 조사하기
'm' in a
>> True
'a' in a
>> False
'백준 > 파이썬' 카테고리의 다른 글
[ 백준 문제 1152 / 파이썬 ] 단어의 개수 (0) | 2023.02.10 |
---|---|
[ 백준 문제 2675 / 파이썬 ] 문자열 반복 (0) | 2023.02.09 |
[ 백준 문제 10809 / 파이썬 ] 알파벳 찾기 (1) | 2023.02.09 |
[ 백준 문제 11720 / 파이썬 ] 숫자의 합 (0) | 2023.02.09 |
[ 백준 문제 11654 / 파이썬 ] 아스키 코드 (1) | 2023.02.09 |