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를 찾는 것을 종료하도록 했다.
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