"마릴린 먼로 초상들" (앤디 워홀, 1964~)
strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어,
strs = ['start', 'stair', 'step']
return은 'st'
strs = ['start', 'wework', 'today']
return은 ''
- 이 문제도 결국 스스로 갈피를 잡을 수 없어서 열심히 찾았다.
- 정말 많은 답이 나왔지만, 대부분은 내가 이해하기 어려운 수준의 답이었다.
- 찾은 해결책 중 가장 직관적인 답을 구하여 이를 분석해 보았다.
- 위의 링크에 일러스트레이션도 있으니 꼭 들어가 보길 바란다.
sort()
를 활용하여 해당 리스트를 알파벳 순서로 정렬시킨다.- 빈 문자열
result
를 선언한다.for 문
으로 정렬한 리스트의 처음과 끝 요소의 공통된 단어를 찾는다.- 공통된 단어가 있으면
result
에 넣는다.- 단어가 겹치지 않으면 곧바로
break
를 걸어 반복문에서 나온다result
를 반환한다.- 리스트가 빈 경우와, 리스트의 요소가 하나일 경우에 대한 예외 조건을 맨 위에 넣는다.
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
스택오버플로우에서 찾은 답안인데,
os.path.commonprefix
를 활용하여 바로 풀 수 있다..?
이걸 쓰면 너무 얌체 같아서 이런 게 있구나 정도만 알면 되지 않을까 한다.
import os.path as p
def get_prefix(strs):
return p.commonprefix(strs)