[CodeKata] def get_len_of_str(s):

GYUBIN ·2021년 10월 28일
0

코딩테스트 준비

목록 보기
5/10

문제

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

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

예를 들어,

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

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

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

풀이

def get_len_of_str(s):
    if len(s) == 0:
	return 0
    unique_s = set(s)
    if len(s) == len(unique_s):
	return len(s)
    for i in unique_s:
	if s.count(i) != 1:
	    if (len(set(max(s.split(i), key = len)))) == (len(max(s.split(i), key = len))):
		return len(max(s.split(i), key = len)) +1

문제 접근

input값이 없다면 0을 return한다
중복 값이 없다면 input값의 길이를 return한다

 1. set을 사용해 고유 값을 구한다
 2. input값을 반복문을 통해 고유 값으로 split한다
 3. 그 중 길이가 가장 큰 값에 +1을 하여 return한다

접근방법을 코드로 적으면 len(max(s.split(i), key = len)) +1 이 된다

    for i in unique_s:
	if s.count(i) != 1:
	    return len(max(s.split(i), key = len)) +1
    for i in unique_s:
	if s.count(i) != 1:
	    if (len(set(max(s.split(i), key = len)))) == (len(max(s.split(i), key = len))):
		return len(max(s.split(i), key = len)) +1

여기서 첫 번째가 아니라 두 번째함수처럼 조건문을 하나 더 사용한 이유는
첫 번째 함수의 경우 중복 값이 여러 개일 때 고정된 값이 아니라 set에 의한 랜덤 값이 split 시켜버린다
따라서 함수를 실행할 때 동일한 값이 나오지 않는다

그 문제를 해결하기 위해 다시 한 번 set을 사용해 길이를 비교했다

다른 풀이

def get_len_of_str(s):
  str = []
  length = 0

  for i in range(len(s)):
    if s[i] not in str:
      str.append(s[i])
    else:
      str = [s[i]]
    length = max(length, len(str))
  return length

빈 list를 만들어서 input값의 길이 만큼 반복문을 실행시킨다
이 때 s[i]에 해당하는 값이 list에 없다면 추가시키고, 있다면 list를 재정의한다
반복문이 실행될 때마다 length와 list의 길이를 비교해 더 큰 값을 length에 재정의한다

0개의 댓글