문자열 내 마음대로 정렬하기
문제 링크
나의 풀이
def solution(strings, n):
answer = []
for i in strings:
answer += i[n]
answer = sorted(answer)
answer2= []
for i in answer:
for j in strings:
if j[n] == i:
answer2.append(j)
return answer2
- 주어진 인덱스의 문자가 같은 문자열이 여럿일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치하는 조건을 만족하지 못한 코드 이다. 아래와 같이 다시 작성하였다.
def solution(strings, n):
answer = []
for i in range(len(strings)):
strings[i] = strings[i][n] + strings[i]
strings = sorted(strings)
for string in strings:
answer.append(string[1::])
return answer
- 주어진 인덱스 n 의 문자를 각 문자열의 가장 앞에 붙이고 오름차순 정렬한 다음에 슬라이싱을 이용해 앞에 붙인 문자열을 떼서 return 한 방식이다.
다른 사람의 풀이
def strange_sort(strings, n):
min = []
result = []
for i in strings:
min.append(i[n])
sorted_min = sorted(min)
while len(result) != len(strings):
for j in range(0, len(strings)):
for k in range(0, len(strings)):
if sorted_min[j] in strings[k][n]:
index = k
result.append(strings[index])
continue
return result
- 간결한 코드도 아니고 좋은 답안인지는 잘 모르겠지만 내가 첫번째로 작성한 답안과 동일한 풀이방식을 가지고 있다. 하지만 난 첫 번째 풀이방식으로 답을 맞추지 못했기 때문에 이 소스코드를 가져와 봤다. 공부하는 입장에서는 효율성 여부를 떠나 끝까지 답을 도출한 것도 충분히 의미가 있다고 생각한다.
- 추가적으로 lambda함수를 이용한 풀이법에 대해 공부해야겠다.