반응형
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
<<코드>>
A = input().upper() #A의 값의 출력은 대문자로 들어가야하니 처음부터 대문자 출력
word_list = list(set(A)) #집합 함수 set()으로 중복값 제거 후 리스트화
most_word = [] #빈도수를 넣는 리스트를 빈채로 생성
for w in word_list: #중복값 제거한 문자열 리스트에서 for문 반복
count = A.count(w) #input된 알파벳에서 알파벳의 빈도 수 카운트
most_word.append(count) #카운트된 값을 most_word 빈 리스트에 추가
if most_word.count(max(most_word)) > 1: #만약 max값이 1개 이상이라면 물음표 출력
print("?")
else:
print(word_list[most_word.index(max(most_word))])
#만약 max값이 1개라면, 맥스값의 most_word 내 위치 = word_list의 알파벳 위치, 인덱싱으로 찾기
<<결과값>
$ python main.py
Mississipi
?
입력, 출력, 문제 길이보고 쉬울줄 알았다가 생각보다 이해하기 까다로웠던 문제였다.. 반성합니다... ( Ĭ ^ Ĭ )
처음에 A를 일단 리스트로 만들고 리스트 값을 count해서 또 리스트에 넣어놓고 거기서 max값을 뽑고 1개 이상이면 ? 출력을 해보자! 라는 생각으로 접근!
어려웠던 부분!
- max값이 1개일때, 값을 print 하는 것이 어려웠다. 수식이 조금 복잡해보여서 그랬던 것 같다ㅠㅠ
max(most_word) 값이 산출되면, 그 값을 most_word에서 index로 어디있는지 찾아내면 그것이 곧 word_list의 알파벳의 위치가 된다!!!
- 처음에 set() 집합함수로 중복값을 제거한 리스트, 전체 리스트, 빈 리스트를 구분해야했던 아이디어도 어려웠었다!
- .upper() 대문자로 변경
- .lower() 소문자로 변경
- max() 최대값 가져오기
728x90
반응형
'알고리즘' 카테고리의 다른 글
[항해99] 2주차 시작, 알고리즘 1주차 (0) | 2021.03.07 |
---|---|
[파이썬] 단계별 백준 문제 풀기 - 2941 문자열 크로아티아 알파벳 (0) | 2021.03.07 |
[파이썬] 단계별 백준 문제 풀기 - 4673 함수 (셀프넘버) (0) | 2021.03.06 |
[파이썬] 단계별 백준 문제 풀기 - 4344 1차원 배열 (평균은 넘겠지) (0) | 2021.03.06 |
[파이썬] 단계별 백준 문제 풀기 - 1110 While문 더하기 사이클 (0) | 2021.03.06 |