Code Kata | day3 get_len_of_str

6497 단어 codekatacodekata

Q. String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.

예를 들어,

str = "abcabcabc"
return3
=> 'abc' 가 제일 길기 때문`

str = "aaaaa"
return1
=> 'a' 가 제일 길기 때문

☘️ 0차

  1. for을 사용해서 str의 첫번째 문자부터 마지막 문자까지 호출
  2. if를 사용해서 중복된 문자가 등장하면 그때까지 호출된 문자를 저장
  3. 저장된 문자의 길이를 len함수를 사용해 얻고, max함수를 사용해 최대값 반환

☘️ 1차 (fail)

def get_len_of_str(s) :
    word = s[0]
    result = []
    for x in range(1,len(s)) :
        if s[x] not in word :
            word += s[x]
        else:
            result.append(word)
            word = s[x]
        result.append(word)
    return max([len(x) for x in result])

☘️ 2차 (pass)

def get_len_of_str(s) :
    if s :
        word = s[0]
    result = []
    for x in range(1,len(s)) :
        if s[x] not in word :
            word += s[x]
        else:
            result.append(word)
            word = s[x]
        result.append(word)
    return max([len(x) for x in result])
    else :
        return 0

s가 빈 문자열일 경우 인덱스 에러가 발생
s값이 존재할 때 (True 일 때 ) 다음 과정이 진행될 수 있도록
s값이 없을 때(False 일 때 ) 0을 반환하도록 수정

☘️ Review

처음엔 딕셔너리를 이용해서 { 단어 : 단어의 길이 } 의 형식으로 저장한 뒤에 단어의 길이의 최대값을 구할까 생각했다. 하지마 딕셔너리의 value값 간의 비교는 어차피 리스트의 형태로 가공한 뒤 max함수를 사용하기 때문에 처음부터 리스트 형태로 길이값을 저장하는게 효율적이다.

간단한 for문의 작성은 list comprehension 을 사용해 간결하게 적는다.

좋은 웹페이지 즐겨찾기