[CodeKata]Day5

박민하·2022년 6월 12일
0

python 문제

목록 보기
20/49
post-thumbnail

Code Kata 란, 2인 1조의 구성으로 서로 협력하여 하루에 한 문제씩 해결하는 과제입니다.


# 문제

strs은 단어가 담긴 배열입니다.

공통된 시작 단어(prefix)를 반환해주세요.

예를 들어

strs = ['start', 'stair', 'step']
return'st'
strs = ['start', 'wework', 'today']
return''

# 코드

1. sort로 정렬 후 앞에부터 일치하는 단어가 있는지 탐색

def get_prefix(strs):
  if not strs:
    return ''
  elif len(strs) == 1:
    return strs[0]
    
  strs.sort()
  result = ""
  for i in range(len(strs[0])):
    if strs[0][i] == strs[-1][i]:
      result += strs[0][i]
    else:
      break
  return result
  • if not 조건문 ⇒ 조건문이 false면 return
  • if 조건문 ⇒ 조건문이 true면 return
  • 리스트가 빈 리스트면 false, 데이터가 있으면 true
  • if not strs ⇒ strs라는 리스트가 빈 리스트면 return

# 개선 답안

def get_prefix(strs):
  if len(strs) == 0:
    return ''
    
  strs.sort()
  result = ""
  for i in range(len(strs[0])):
    if strs[0][i] == strs[-1][i]:
      result += strs[0][i]
    else:
      break
  return result

# 풀이 과정

  1. 문자 길이 제한이 없으니 이 부분 고려.
  2. for 반복문 사용.
  3. 처음부터 일치하지 않으면 빈 값 return
    • 우선 리스트 인수의 첫 단어가 일치하는지부터 알아야함
  4. 어떻게 하지...?
  5. 빈 리스트면 빈 값 return => if not strs: return ''
  6. sort로 알파벳순으로 정렬해서 일치하는 단어 찾기 쉽게 하기
  7. strt의 길이만큼 for문 반복

# ?

1시간 이내에 해결 실패


+ 그 외 코드

1. os.path의 commonprefix() 함수 사용

import os.path as p

def get_prefix(strs):     
  return p.commonprefix(strs)

# ?

def get_prefix(strs) -> str:
    prefix = ""
    for chars in zip(*strs):
        if len(set(chars)) > 1:
            break
        prefix += chars[0]
    return prefix

# try ~except문 사용 #?

def get_prefix(strs):
  result =''
  idx = 0
  try:
    while True:
      new_list = [i[idx] for i in strs]
      if len(set(new_list)) == 1:
        result += new_list[0]
      else:
        break
      idx += 1
    return result
  except:
    return result
profile
backend developer 🐌

0개의 댓글