[Python/파이썬] 백준 알고리즘 1157번 / 단어 공부
문제 링크: https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
최종 소스코드
word = input().upper() # mississipi
word_list = list(set(word)) #['S', 'I', 'M', 'P']
cnt = []
for i in word_list:
cont = word.count(i) #S = 4
cnt.append(cont) #cnt = [1, 1, 4, 4]
if cnt.count(max(cnt)) >= 2 :
print('?')
else :
print(word_list[(cnt.index(max(cnt)))])
<풀이>
단계별 풀이의 문자열 풀이 중 실버등급의 다른 문제보다도 제일 어려웠던 브론즈 문제였다. 단어를 set 자료형으로 저장해 중복을 없애고 다시 리스트에 저장한 뒤 빈 리스트를 만들어 알파벳 개수를 세는데 이용하였다.
이후 cnt 리스트의 최댓값이 중복되면 '?'가 출력되고 하나라면 최댓값이 출력되도록 하였다. count, max, index 함수를 사용하면 코드를 비교적 간단하게 짤 수 있다.(처음에는 엄청 난잡하게 짰다)
1. count 매소드 사용
for i in word_list:
cont = word.count(i) #S = 4
cnt.append(cont) #cnt = [1, 1, 4, 4]
word 안에서 word_list의 알파벳 하나하나의 숫자를 count를 이용하여 세고 cont에 저장한다. 이 후 빈 List인 cnt에 개수를 저장한다.
2. index, max 매소드 사용
else :
print(word_list[(cnt.index(max(cnt)))])
index를 사용하면 그 숫자가 리스트에서 몇 번째에 처음으로 등장했는지 알아낼 수 있다. cnt에서 가장 큰 수의 위치를 index를 이용해 찾고 이후 그 알파벳을 출력한다.
'알고리즘, 자료구조 > 백준' 카테고리의 다른 글
[Python/파이썬] 백준 알고리즘 2581번 / 소수 (0) | 2022.10.21 |
---|---|
[Python/파이썬] 백준 알고리즘 2941번 / 크로아티아 알파벳 (0) | 2022.10.20 |
[Python/파이썬] 백준 알고리즘 10809번 / 알파벳 찾기 (0) | 2022.10.10 |
[Python/파이썬] 백준 알고리즘 1065번 / 한수 (0) | 2022.10.08 |
[Python/파이썬] 백준 알고리즘 4673번 / 셀프 넘버 (0) | 2022.10.07 |