본문 바로가기

알고리즘/백준알고리즘

[백준 알고리즘/Python3] 1157 단어 공부

문제

 

 

문제 이해

문자열을 받는다 -> 모두 대문자로 바꿔준다.

 

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 함수와 다른 점은 문자나 문자열이 없을시는 오류가 발생한다는 점이다.

  1. string.index(찾을 문자열 및 문자, 시작위치, 끝위치)
  2. 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])

 

728x90