[BOJ/백준-Python]1157번 - 단어 공부

1157번 - 단어 공부

문제

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

입력

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

출력

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

예제 입력 1

Mississipi

예제 출력 1

?

예제 입력 2

zZa

예제 출력 2

Z

예제 입력 3

z

예제 출력 3

Z

예제 입력 4

baaa

예제 출력 4

A

해결할 방법을 생각해보자.💡

문제를 자세히 보면 영어의 대소문자를 구분하지 않는다고한다. 그리고 예제 출력을 보면 알 수 있듯이 가장 많이 나온 알파벳이 출력될 때는 무조건 대문자로 나온다. 그 이유로 우선 입력받는 문자열을 모두 대문자로 바꿔줘야한다.

S = input().upper()

문자열을 입력받았다면 이것들이 어떤 알파벳을 가지고 있는지 알기 위해 set()함수를 사용해야 한다. set() 함수는 중복되는 값을 없애주고 유일한 값들만 남기기 때문이다. 추가적으로 튜플형(())으로 바꿔주기 때문에 이용하기 편하게 리스트형으로 바꿔주자.

words = list(set(S))

유일하게 존재하는 알파벳들을 알아냈다면, 입력받은 S에 그 알파벳들이 몇 개씩 사용되는지 갯수를 세줘야 한다. 그 값들을 저장하기 위한 빈 리스트 하나를 만들어주자.

word_count = []

이제 쓰였던 알파벳들이 존재하는 words 변수를 범위로 반복문을 사용해보자. word는 알파벳인데 입력받은 문자열 S에서 이 알파벳이 몇번이나 쓰였는지 알기위해서는 count() 함수를 사용하면 된다.(리스트형에서 사용할 수 있는 함수) 따라서, S.count(word)와 같은 형태로 몇번 사용했는지 구해준 뒤에 아까 만들어준 갯수용 리스트(word_count)에 추가(append()) 해주면 된다. append를 하면 기존의 값의 위치는 그대로 존재하게 그 뒤로 값이 추가되므로 words의 알파벳과 word_count의 갯수가 동일 선상(인덱스)에 위치할 수 있다.

for word in words:
    word_count.append(S.count(word))

이렇게 모든 준비를 마쳤다면, 이제 출력부분만 남았다.

문제에서는 사용 횟수가 가장 많은 알파벳이 유일하지 않고 2개 이상으로 중복된다면 ? 표시로 출력되게 하고있다. max() 함수를 사용하면 리스트형 내에 존재하는 숫자중 가장 큰 값을 리턴해준다. 사용 횟수들이 저장되어있는 word_count라는 배열에서 max()로 가장 높은 횟수를 구해준 뒤, 다시 count()함수를 사용해서 가장 높은 횟수가 몇개나 존재하는지 체크할 수 있다. 그리고 그 값이 유일한(1) 값이 아니라면 print()문을 사용해 ?를 출력해주면 된다.

if word_count.count(max(word_count)) != 1:
    print('?')

그리고 사용횟수가 가장 많은 알파벳이 2개 이상이 아닌, 유일한 값(하나)이라면, word_count에서 가장 큰 값의 인덱스를 찾아 words라는 사용된 알파벳이 저장되어있는 배열에서 동일한 인덱스로 그 값을 찾아서 출력해주면 문제 해결이다!

else:
    print(words[word_count.index(max(word_count))])

코드💻

S = input().upper()

words = list(set(S))
word_count = []

for word in words:
    word_count.append(S.count(word))

if word_count.count(max(word_count)) != 1:
    print('?')
else:
    print(words[word_count.index(max(word_count))])

해결 로그

문제 푼 날짜 체크
2022-05-26
   
   
   
   

2022

[web]jQuery 복습 3

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

13 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

14 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

5 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

10 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑