[Code Kata] 3. get_len_of_str

그냥·2022년 6월 10일
0

CodeKata

목록 보기
2/18

문제

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

str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)

예를 들어,

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

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

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

풀이

  1. 문제의 조건 정리
1) str형의 인자를 받는다.
2) int형의 값을 반환한다.
3) 가장 긴 중복되지 않은 알파벳의 길이를 구한다.

  1. 조건에 대한 코드 구현 방법 생각
1) str(문자열)은 iterator로 바로 for문을 사용할 수 있다.
2) 처음 글자부터 for문을 돌리면서 그 글자를 list1에 저장한다.
3) 그 다음 글자가 list1를 확인하면서 이전 글자와 같으면 4) list1의 모든 요소를 list2에 옮기고 list1은 초기화, 다르다면 list1에 다음 글자를 저장한다.
5) for문이 모두 돌아간 뒤에 list1에 있던 모든 요소들을 list2에 옮긴다.
6) max() 메소드를 사용해서 요소들 중 가장 요소가 많은 값을 구한다.
7) 출력된 리스트를 len() 메소드를 사용해서 길이값을 return한다.

  1. 구현 코드
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. 코드 리뷰
    1) 처음에 리스트 2개를 선언하는 것 말고 다른 방법은 없는가
    2) 리스트 a를 초기화 하는 다른 좋은 방법이 없는가

  1. 최고의 코드
def get_len_of_str(s):
  str = []
  l = 0
  
  for i in s:
    if i not in str:
      str.append(i)
    else:
      str = [i]
    l = max(l,len(str))
    
  return l

코드 리뷰에서 제기된 이슈를 해결한 코드이다.

1) 2개의 리스트가 아닌, 1개의 리스트와 1개의 변수를 선언
2) if문에서 in이 아닌 not in을 사용하여 없을 경우 리스트에 문자열을 append, 있을 경우 str = [i]라는 구문을 사용하여 1개의 리스트로 바로 초기화
3) for문 마지막에 전역 변수로 선언한 l에 max(l, len(str))을 사용하여 for문이 돌때 마다 가장 긴 str 리스트의 길이 값을 저장

굳이 리스트를 2개를 선언할 필요 없이 하나의 리스트를 사용해서 문자열을 받고 스스로 초기화 후 for문 마지막에 변수 l을 사용하여 가장 긴 값을 받음

0개의 댓글