728x90
백준 1157번 문제 풀기
https://www.acmicpc.net/problem/1157
문제 설명
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
예제 입력 1
|
예제 출력 1
|
Mississipi |
?
|
예제 입력 2
|
예제 출력 2
|
zZa
|
Z
|
예제 입력 3
|
예제 출력 3
|
z
|
Z
|
예제 입력 4
|
예제 출력 4
|
baaa
|
A
|
알고리즘 및 설명
- sunning algorithm
S = str(input())
S = S.upper()
S_list = list(set(S))
cnt = []
for i in range(len(S_list)):
cnt.append(list(S).count(S_list[i]))
Max = max(cnt)
if cnt.count(Max) != 1:
print("?")
else:
print(S_list[cnt.index(Max)])
입력값을 문자열 형태로 S의 변수로 입력받아 S의 문자들을 다 대문자로 통일해준다.(대소문자 구분을 없애기 위해)
또한 S에서 중복된 값들을 제거하고 고유의 문자들만 모으기 위해 집합 set 형태로 S_list를 만들어주었다.
Set(집합) 자료형
- 중복을 허용하지 않는다. (중복을 허용하지 않는 set은 자료형의 중복을 제거하기 위한 필터 역할로 사용 가능)
- 순서가 없다.
Set 자료형은 중복 제거를 위해 사용될 수 있지만 순서가 없어서 인덱싱이 불가능하다. 따라서 나는 set으로 변환한 것을 다시 list로 변환하여 중복 제거를 하는 동시에 인덱싱이 가능하도록 하였다.
반복문을 활용하여 입력값에서 S_list의 요소들이 각각 몇 개가 있는지 개수를 cnt에 추가하였다. 그리고 cnt 중에 최댓값이 여러개이면 ?를 출력하고 하나이면 그 인덱스에 해당하는 대문자 알파벳을 반환하도록 하였다.
728x90
'파이썬(Python) > 백준(Baekjoon) 문제 풀이' 카테고리의 다른 글
[백준, python 파이썬] 2908번 : 상수(문자열) (0) | 2022.03.23 |
---|---|
[백준, python 파이썬] 1152번 : 단어의 개수(문자열) (0) | 2022.03.23 |
[백준, python] 2675번 : 문자열 반복(문자열) (0) | 2022.03.21 |
[백준, python] 10809번 : 알파벳 찾기(문자열) (0) | 2022.03.21 |
[백준, python] 11654번 : 아스키 코드(문자열) (0) | 2022.03.21 |