백준 1157번, dictionary 활용, count함수
문제
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
나의 풀이
string = input().upper()
tempdic={}
for a in range(len(string)):
if string[a] not in tempdic:
tempdic[string[a]]=1
else:
tempdic[string[a]]+=1
count=0
for key,value in tempdic.items():
if max(tempdic.values())==int(value):
count+=1
tempdic={v:k for k,v in tempdic.items()}
if count>1:
print('?')
else:
print(tempdic.get(max(tempdic)))
문제 접근
대,소문자를 구분하지 않으므로 입력받은 문자를 모두 대문자로 바꾸어주었고
입력받은 값을 dictionary를 이용하여 {단어:언급된 횟수}로 바꾸어주었다.
for문을 이용해 tempdic에 있는 key값과 value값을 이용해 value값이 중복된 값이 있는지 확인하였다
value를 이용하여 key를 찾는 방식을 이용하면 딕셔너리 전체를 순회하면서 가져오기 때문에 비효율적이므로 key 값과 value 값을 바꾸어서 key를 이용하여 value값을 구하는 방식을 이용했다.
다른 사람의 풀이
word = input().upper()
word_list = list(set(word))
cnt = []
for i in word_list:
count = word.count
cnt.append(count(i))
if cnt.count(max(cnt)) > 1:
print("?")
else:
print(word_list[(cnt.index(max(cnt)))])
대문자로 문자를 모두 변경해준 것은 같지만
set을 이용해서 중복된 문자값을 제거한 후 변수에 저장하였고
for문을 이용하여 알파벳이 사용된 횟수를 리스트에 저장하였다.
if문을 이용하여 알파벳이 언급된 횟수가 가장 큰 값과 같은 값이 있다면 ?가 출력되게 하고 아니라면 언급된 횟수가 가장 많은 알파벳이 출력되게 하였다.
여기서 upper함수는 문자열을 대문자로 변경하는 함수이다. 소문자로 변경하고 싶다면 lower 함수를 이용하며
문자가 대문자인지 확인하고 싶다면 isupper함수, 소문자인지 확인하고 싶다면 islower함수를 이용한다.
여기서 사용된 count함수는 문자열에서 쓰이는 메서드로 문자열 내부에서 특정 문자, 혹은 문자열이 포함 되어있는지 계산해서 반환해주는 함수이다.
count(x,start,end)의 모양을 띄고 있다.
. count는 대소문자를 구분하며
. x에는 문자 한개, 문자열 모두 가능하다
. start,end에 아무것도 넣지 않으면 문자열 처음부터 끝까지 탐색한다.
. start <= x < end 의 범위로 찾게 된다.
여기서 max함수는 최대값을 찾는 함수이다.
배운 점
. upper의 사용법
. dictionary의 활용법
. in의 활용법
. count의 사용법
. max함수의 사용법
참고
dictionary의 활용
https://transfer-kk.tistory.com/29
[파이썬] dictionary의 활용
목차 0. 딕셔너리란? 1. 딕셔너리 만들기 2. 딕셔너리에 key 값과 value값 할당하기 3.. key값으로 value값 출력하기 4. value값으로 key값 출력하기 5. in, not in 활용하여 key값 찾기 6. 딕셔너리의 key 값만 출
transfer-kk.tistory.com