[Python] Code Kata Day5

rang-dev·2020년 6월 12일
0

Wecode - Code Kata

목록 보기
5/18

문제

strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.

예를 들어
strs = ['start', 'stair', 'step']
return은 'st'

strs = ['start', 'wework', 'today']
return은 ''

내코드

def get_prefix(string):
  result = str()
  prefix = True
  
  if string==[]:
    return ''
  
  shortest = len(string[0])
  
  for i in string:
    if len(i) < shortest:
      shortest = len(i)
  
  for i in range(shortest):
    prefix_elem = string[0][i]

    for j in range(len(string)):
      if prefix_elem != string[j][i]:
        prefix = False
        break
      else:
        prefix = True
    if prefix == False:
      break
    else:
      result += prefix_elem
    
  return result

서로 다른 단어의 index를 차례차례 비교해야기때문에 이중 for문을 사용했다. 또한 단어들의 철자를 비교할때 한 단어의 길이가 짧다면 더이상의 비교는 필요 없기 때문에 가장 짧은 단어의 길이를 구해서 outer for문이 그 길이에 맞춰 끝나도록 했다.

outer for문의 i는 각 요소에서 몇번째 index를 비교할지를 결정하고 inner for문에서는 j를 이용해서 list에 있는 각 단어들을 돌면서 i에서 지정한 index를 서로 비교한다.

또한 모든 단어를 다 돌때까지 prefix가 같은지 확인해야하기때문에 만약 inner for문을 다 돌았을때까지 True이면 모두 같은 철자를 가지고 있는 것이고, 만약 False가 한번이라도 나온다면 바로 inner for문을 나오도록 해서 prefix를 찾는 것을 종료하도록 했다.

Model Solution

def get_prefix(strs):
    if len(strs) == 0:
        return '' 
    res = ''
    strs = sorted(strs)
    for i in strs[0]:
        if strs[-1].startswith(res+i):
            res += i
        else:
            break
    return res

일단 짧은 길이에 한번 놀랐다👏👏👏
여기서는 일단 list에 있는 단어들을 정렬한 후 가장 첫번째 단어와 가장 마지막번째 단어만을 비교했다. 왜냐면 이미 오름차순으로 정렬되었기 때문에 가장 처음 단어와 마지막 단어에서 같은 index에 있는 알파벳이 같다면 중간에 있는 단어는 무조건 같을 것이기 때문이다.(와우)

그리고 startswith라는 함수를 사용했는데 처음보는 함수였다. startswith는 argument로 오는 문자로 시작된다면 True를 return하는 함수라고 한다.

그래서 첫번째 단어와 마지막 단어에서 동일 index상의 철자가 같으면 res에 계속 더해주게되고 그 res를 통해 startwith인지 아닌지를 확인하는 것이다. index에서 그때그때 철자만 비교하면 되지 왜 res에 따로 더해줄까? 싶었는데 startwith를 쓰기 위해서였다.

오늘도 멋잇었던 모범답안👩‍💻

startswith함수 살펴보기: https://dpdpwl.tistory.com/119

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글