TIL - CodeKata(3)

7370 단어 algorithmalgorithm

# 문제

# 풀이

  • 나의 풀이
import time

def get_len_of_str(s):

    start_time = time.time()

    x = list(s)

    y = []

    z = []

    if s == '':                 # 예외처리
      return 0

    for i in range(len(x)):

        if x[i] not in y:

            y.append(x[i])

            if i == len(x)-1:

                z.append(''.join(y))

        else:

            z.append(''.join(y))
            y.clear()           # 리스트 객체 y를 초기화하고 싶으면 y =[]를 사용해도 된다.
            y.append(x[i])
            
    w = max(len(q) for q in z)  #  s = ''일 때 이 부분에서 error가 발생
                                # list comprehension

    end_time = time.time()

    print(end_time-start_time)

    return w
  • review

    • 매개변수 s로 빈 문자열(s='')이 주어졌을 경우, w = max(len(q) for q in z) 부분에서 error가 발생한다. 그 이유는 iterable한 객체만이 max()의 인자로 사용될 수 있기 때문이다. 숫자 0(len('')=0이므로)은 iterable하지 않기 때문에 max()가 실행되지 못하고, 이는 error의 원인이 된다.
    • 그 때문에, if문으로 s = ''인 경우에 대한 예외 처리가 이뤄져야 한다.
    • 리스트 객체를 y를 초기화하고 싶은 경우 y.clear() 대신 y=''를 사용할 수도 있다.
    • list comprehension을 활용하면, for문을 활용하여 append()로 요소를 추가하는 작업을 거치지 않고, list객체를 생성할 수 있다.
  • 다른 풀이

def get_len_of_str(str):
  answer = ['']
  i = 0
  for s in str:
      if s not in answer[i]:
          answer[i] += s      # 초깃값 활용하여 특정 인덱스 값을 변화시킴
      else:
          i += 1
          answer.append(s)
  return max(len(el) for el in answer)
  • review
    • 초깃값 i의 활용이 while문이 아니 for문에서도 가능하다는 걸 알게 됐다. for문에서 초깃값 i를 활용하면, 리스트 객체에 요소를 추가할 때, 특정 인덱스의 요소값을 변화시키는 것이 가능하다.(?? 표현이 너무 추상적이서 의미 전달이 안되는 것 같지만...)
    • 시퀀스 객체(str, tuple, list 등)에 요소를 첨가할 때 '+' 연산자 활용이 가능하다는 것을 기억해두자.

좋은 웹페이지 즐겨찾기