문제
문제 이해
문자열을 받는다 -> 모두 대문자로 바꿔준다.
set()을 이용해서 중복된 것을 없에준다.(리스트로 만든다.)
count()를 써서 받은 문자열에 중복 없엔것을 for문으로 돌려서 중복된 것의 갯수를 구한다.(리스트로 만든다.)
중복된 것들의 리스트에서 또 중복된 것을 찾아본다.
ex)
Mississipi는
M:1
i:4
s:4
p:1
[1,4,4,1]인 리스트가 만들어 질것입니다.
여기서 i와 s의 중복 갯수가 같습니다. 그럼 위 리스트에서 최대값을 구해봅니다.(=4)
리스트의 count(4)를 하면 2가 나올 것입니다.
리스트 안에 4가 2개있기 때문입니다.
그래서 1 이상인 count값이 나오면 중복인 값이 있다는 겁니다.
그 외에 경우는 모두 중복이 없이 알파벳 1개가 더 긴 경우입니다.
중복을 채크한 리스트를 보면 가장 높은 값을 가진 리스트를 출력해야 합니다.
가장 높은 값을 가진 리스트의 인덱스를 뽑아봅시다.
그러면 index()메서드를 사용해가지고 뽑아봅시다.
index 함수 - 배열에서 원하는 값의 위치 찾기
index 함수는 str 클래스 내장 함수이며
문자 및 문자열의 위치를 찾아준다.
같은 문자 및 문자열이 있을경우 처음 검색된 위치를 반환한다.
문자 나 문자열이 없을시에는 오류를 반환 한다.
find 함수와 다른 점은 문자나 문자열이 없을시는 오류가 발생한다는 점이다.
- string.index(찾을 문자열 및 문자, 시작위치, 끝위치)
- string.index(찾을 문자열 및 문자)
출처: https://sinaworld.co.kr/32 [황시나의 개발새발개발]
ex) asdffgh
중복을 제외한 리스트 = ['S', 'F', 'H', 'A', 'D', 'G']
중복된 값을 가진 리스트 = [1, 2, 1, 1, 1, 1]
많이 사용된 알파뱃은 f입니다.
f의 인덱스를 뽑으려면 중복된 값을 가진 리스트의 최대값의 인덱스를 가져와야 합니다.
그리고 그 인덱스를 가지고 중복을 제외한 리스트의 인덱스로 구하면 됩니다.
코드
input_string = input().upper()
unique_word = list(set(input_string))
li = []
for i in unique_word:
word = input_string.count(i)
li.append(word)
# 중복되는 것들이 1개 이상이라면
if(li.count(max(li))>1):
print("?")
else:
print(li)
print(unique_word)
max_index = li.index(max(li))
print(unique_word[max_index])
'알고리즘 > 백준알고리즘' 카테고리의 다른 글
[백준 알고리즘/Python3] 2941 크로아티아 알파벳 (0) | 2021.08.31 |
---|---|
[백준 알고리즘/Python3] 5622 다이얼 (0) | 2021.08.30 |
[백준 알고리즘/Python3] 10809 알파벳 찾기 (0) | 2021.08.26 |
[백준 알고리즘/Python3] 1065 한수 (0) | 2021.08.23 |
[백준 알고리즘/Python3] 4673 셀프 넘버 (0) | 2021.08.22 |