CodeKata #3

신지원·2021년 4월 1일
0

이해는 했지만 말로 설명하려니 못해서 정리하는 코트카타#3

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

example

1) str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문

2) str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문

3) str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문


처음에 내가 생각했던 방법은 빈리스트를 만들고 for문을 돌려서 리스트에 글자가 하나씩 없을때마다 추가하는것. 근데 이거는 abcabcabc같은 경우나 aaaaa같은 경우는 되는데, sttrg는 안됐다. ->[strg]로 들어와 버리기 때문에.

def get_len_of_str(s):
    # 아래 코드를 작성해주세요.
    M = 0
    for i in range(len(s)):
        answer = []    
        for j in range(i, len(s)):
            if(s[j] not in answer):
                answer.append(s[j])
                M = max(M,len(answer))
            else:      
                break
    return M

print(get_len_of_str('sttrg'))

1) for문을 2개 돌려서 s[0]부터 시작해서 끝까지 돌면서 li에 같은 숫자가 없을 경우 리스트에 추가하고 같은 값이 나올때는 if문을 빠져나가서 다시 처음 for로 올라가서 그 다음부터 또 다시 끝까지 돌면서 같은 숫자가 없을 경우 리스트에 값을 추가한다.
=> 이게 지금 for문이 하는 역할

< for을 2개 넣은 이유는 두번째 for의 range의 start 지점을 정해주기 위한것이다. (계속 처음부터 시작하면 안되고 한번 돌면 그다음 index 값부터 시작해야니깐! >
값을 추가하면서 계속해서 M의 값을 갱신한다.

2) 리스트에 같은 글자가 없을 경우 리스트 안에 글자가 추가되면서 len의 길이가 길어지게 되고, M의 값도 계속해서 제일 큰 값으로 업데이트 된다.

이렇게 하면 연속되는 알파벳의 길이를 뽑는것이 가능하게 된다!

0개의 댓글