[파이썬] 백준 1157번 단어 공부

우디·2021년 12월 14일
3

알고리즘

목록 보기
4/8
post-thumbnail

단어 공부

1. 문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

2. 입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

3. 출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

4. 입출력 예제

5. 나의 풀이

(1) 입력 받기

word = input().upper()

문제에서 대소문자를 구분하지 않고, 최종적으로 대문자로 출력을 해 줘야 하기 때문에,
입력받은 시점에서 upper()를 사용해 대문자로 바꾸어 주었다.

(2) 중복 없는 배열 만들기

s_word = list(set(word))
count_word = []

set을 이용해 중복을 없애고 다시 list로 만들어 주었다
s_word의 요소를 하나씩 확인하며 word 배열에 같은 요소가 몇개 있는지 확인해 count_word배열에 담아 줄 것이다

(3) 최종 연산

for k in s_word:
    count_word.append(word.count(k))
if count_word.count(max(count_word)) > 1:
    print("?")
else:
    index = count_word.index(max(count_word))
    print(s_word[index])

s_word의 요소를 하나씩 확인하며, word 배열안에 같은 요소의 수를 count_word 배열에 넣어준다


count_word 배열안의 숫자가 최대인 것이 가장 많이 등장한 알바벳이기 때문에 max함수를 이용해 최댓값을 찾아준다


단 최댓값이 2개 이상이라면 "?"를 출력해야 하기 때문에 max값의 갯수가 1보다 크다면 "?"를 출력한다


현재 count_word배열과 s_word 배열의 index가 일치하기 때문에 count_word의 max값의 index값을 찾아서 s_word를 출력해준다

6. 전체 코드

word = input().upper()
s_word = list(set(word))
count_word = []
for k in s_word:
    count_word.append(word.count(k))
if count_word.count(max(count_word)) > 1:
    print("?")
else:
    index = count_word.index(max(count_word))
    print(s_word[index])
profile
계정 이전했습니다 https://velog.io/@rjw0907/posts

0개의 댓글