String 형
인 str 인자에서 중복 되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
Python을 거의 공부하지 못한 내게는 너무나 어려운 문제였다...😭
저번 문제처럼 이중 for 문
으로 하려고 했지만.. 생각만 꼬이고 대실패
그래서 다른 팀의 코드를 가져와 분석해 보았다.
max() 함수
는 이터러블에서 가장 큰 item이나, 두 개 이상의 인자에서 가장 큰 것을 반환하는 함수이다.
생각보다 개념이 많으니 링크를 참고!
- 빈 리스트 2개(
a
,b
)를 생성하여s
에 대한for 문
을 돌려서s
의 글자가a
에 있으면,
b
에 넣고,a
를 리셋시킨다.- 만약
s
의 글자가a
에 없으면
a
에 해당 글자를 넣는다.- 이 반복문을 돌리면 겹치지 않는 글자의 단어가 모여
b
에 다 담긴다.- 이 중
max()
를 이용하여 가장 긴 단어를 뽑고len()
으로 정수형으로 변환하여 반환한다.
def get_len_of_str(s):
a,b=[],[]
for i in s:
if i in a:
b.append(a)
a=[]
a.append(i)
b.append(a)
return len(max(b, key=len))
답안 1
과는 달리 변수 count
를 설정하여
new_str
과 정수형 count
를 선언 및 할당s
에 대한 for 문
을 돌려서s
의 글자가 new_str
에 없다면,new_str
에 그 글자를 추가count
에 new_str
의 길이에 대한 최댓값을 할당하고result
에 new_str
의 길이에 대한 최댓값을 할당하여 반환한다def get_len_of_str(s):
new_str = []
count = 0
for i in s:
if i not in new_str:
new_str.append(i)
else:
count = max(len(new_str), count)
new_str = [i]
result = max(len(new_str), count)
return result