[python 기초] code-kata week1-5
🖥 Code-kata week1-4
문제
strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어
strs = ['start', 'stair', 'step']
return은 'st'
strs = ['start', 'wework', 'today']
return은 ''
풀이
내가 처음에 접근한 방식은 set 자료형을 활용하는 것이었다.
list를 set으로 바꾸면 중복값이 제거된다는 점을 활용해,
각 단어 별 문자를 list로 묶고 set으로 바꿨을 때 길이가 1이면
-> 모두 같은 문자라는 뜻이다.
strs = ['start','stair','step']
def get_prefix(strs):
result = ''
min_length = min([len(str) for str in strs])
#for문을 통해 아래와 같이 new_lst를 만들고, 비교가 끝난 후에는 slicing을 통해 첫 문자를 삭제한다.
new_lst = [strs[0][0], strs[1][0], strs[2][0]]
strs[i] = strs[1:] #['tart','tair','tep']
new_lst = [strs[0][0], strs[1][0], strs[2][0]]
strs[i] = strs[1:] #['art','air','ep']
...
...
while min_length != 0:
if set(new_lst) == 1:
#return값에 저장하고 다음 문자로 넘어간다
...
그런데 이렇게 했더니 몇 가지 문제점이 있었다.
- 이중배열을 한번 돌리고나서 for문을 최대한 단순하게 만들고자 첫 번째 문자를 잘라내는 slicing 방법을 사용해야 했고,
- indexing을 사용하다보니 일부 문자열이
''
이 되어버리는 경우 error가 발생했다. - 너무 모든 내용을 한 조건문/While문 등 안에 표현하려고 하다보니, 오히려 코딩이 복잡해졌다.
그래서 다시 생각한 방식은,
- 발생할 수 있는 경우의 수를 블럭화 한다.
- slicing을 사용하지 않고, 첫 먼째 문자열을 기준으로 두고 비교한다.
- 이 함수가 끝나는 시점은 가장 짧은 길이의 문자가
''
이 될 때이므로,min_length
변수를 선언해서 이를 이용한다. ''
이 발생하는 경우는 2가지, 조건문으로 처리한다.- strs 안에 있는 요소가 모두 공백이면
''
return - strs 요소 중 하나라도
''
이 있으면''
return
- strs 안에 있는 요소가 모두 공백이면
그래서 아래와 같이 다시 풀이.
def get_prefix(strs):
result = ''
min_length = min([len(str) for str in strs])
if not strs : return result
if min_length == 0 : return result
i = 0
while True:
std_num = strs[0][i]
for str in strs:
if str[i] != std_num : return result
result += std_num
i += 1
if min_length == i : return result
Author And Source
이 문제에 관하여([python 기초] code-kata week1-5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mquat/python-기초-code-kata-week1-5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)