[CodeKata] def get_prefix(strs):

5939 단어 codekatapythonTILTIL

문제

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

예를 들어

strs = ['start', 'stair', 'step']
return은 'st'

strs = ['start', 'wework', 'today']
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

str을 sort로 정렬시키면 알파벳 순으로 정렬이 된다
이를 이용해서 str로 이루어진 list를 정렬시키면 공통된 시작 단어를 쉽게 구할 수 있음을 알 수 있다

먼저 에러를 방지하기 위해 리스트가 비었을 경우 ''를 반환해주는 조건을 만들었다

1. input된 리스트를 sort시키고 빈 str 값을 갖는 result 변수를 정의했다
2. for문을 통해 첫 단어의 길이만큼 반복시킨다
3. 첫 단어, 마지막 단어를 비교해 각 단어의 위치하는 값이 같다면 result에 추가하고 아닐 경우 break한다

다른 풀이

sort를 쓰지 않고 푸는 방법은 무엇이 있을까 고민하다가 이중 for문으로도 해결하였다

def get_prefix(strs):
    if len(strs) == 0:
	return ''
    if max(strs) == min(strs):
	return strs[0]
    
for i in range(len(strs[0])):
    for str in strs:
	if str[i] == strs[0][i]:
	    continue
	else:
	    return strs[-1][:i]

이중 for문의 외부는 첫 번째 단어의 길이, 내부는 list의 각 단어로 반복문을 실행한다
각 단어의 위치에 같은 문자가 있으면 반복문을 계속 실행한다
다른 단어가 확인되면 list의 마지막 단어에서 i 전 까지 slicing해서 return해준다

이 때 list가 비었을 경우, list의 단어들이 모두 같은 경우는 따로 빼서 return해준다

좋은 웹페이지 즐겨찾기