TIL - CodeKata(3)
# 문제
# 풀이
- 나의 풀이
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객체를 생성할 수 있다.
- 매개변수 s로 빈 문자열(
-
다른 풀이
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 등)에 요소를 첨가할 때 '+' 연산자 활용이 가능하다는 것을 기억해두자.
Author And Source
이 문제에 관하여(TIL - CodeKata(3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fcfargo/TIL-CodeKata-eo2h7c53저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)