[Python] (문제풀이) 중복이 아닌 제일 긴 단어의 길이 반환 하기(Code Kata 1-3) (feat. max() 함수)

이태권 (Taekwon Lee)·2022년 6월 10일
0
post-thumbnail

중복이 아닌 제일 긴 단어의 길이 반환하기(max() function)


❓ 문제

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

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

예를 들어,

str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문

🤔 접근 방식

내 방식(실패)

Python을 거의 공부하지 못한 내게는 너무나 어려운 문제였다...😭
저번 문제처럼 이중 for 문으로 하려고 했지만.. 생각만 꼬이고 대실패
그래서 다른 팀의 코드를 가져와 분석해 보았다.

max() 함수

max() 함수는 이터러블에서 가장 큰 item이나, 두 개 이상의 인자에서 가장 큰 것을 반환하는 함수이다.

생각보다 개념이 많으니 링크를 참고!

❗️ 답안

다른 팀 답안 1

  1. 빈 리스트 2개(a, b)를 생성하여
  2. s에 대한 for 문을 돌려서
  3. s의 글자가 a에 있으면,
    b에 넣고, a를 리셋시킨다.
  4. 만약 s의 글자가 a에 없으면
    a에 해당 글자를 넣는다.
  5. 이 반복문을 돌리면 겹치지 않는 글자의 단어가 모여 b에 다 담긴다.
  6. 이 중 max()를 이용하여 가장 긴 단어를 뽑고
  7. len()으로 정수형으로 변환하여 반환한다.
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))

다른 팀 답안 2

답안 1과는 달리 변수 count를 설정하여

  1. 빈 배열 new_str과 정수형 count를 선언 및 할당
  2. s에 대한 for 문을 돌려서
  3. s의 글자가 new_str에 없다면,
    new_str에 그 글자를 추가
  4. 만약 있다면 countnew_str의 길이에 대한 최댓값을 할당하고
  5. new_str에 해당 글자의 인덱스 값을 할당한다.
  6. 최종적으로 resultnew_str의 길이에 대한 최댓값을 할당하여 반환한다
def get_len_of_str(s):
  new_str = []
  count = 0
  
  for i in s:
    if i not in new_str:
      new_str.append(i)
    else:
      count = max(len(new_str), count)
      new_str = [i]

  result = max(len(new_str), count)    
  return result

🔖 참고 자료

(Programiz) Python max()

(GeeksforGeeks) Python – max() function

profile
(Backend Dev.) One step at a time

0개의 댓글