[파이썬 코드카타]
문자열 내 마음대로 정렬하기
https://school.programmers.co.kr/learn/courses/30/lessons/12915
1) 어떤 문제가 있었나
리스트에 포함된 문자열의 인덱스 n번째 음절 순서대로 정렬하는 문제
[예시]
strings = ["sun", "bed", "car"]
n = 1
result = ["car", "bed", "sun"]
2) 내가 시도해본 건 무엇인가
- 인덱스 n번째 음절을 key 값으로, 문자열을 value 값으로 넣은 딕셔너리 생성 {'u': 'sun', 'e': 'bed', 'a': 'car'}
- key 값 기준으로 정렬하고 value 값 리스트 출력
- 인덱스 n번째 음절이 같을 경우(중복), 딕셔너리 key 값이 마지막 값으로 덮여져서 실패 (딕셔너리 키 값은 중복 안 됨)
# 실패
answer = {}
for i in strings:
answer[i[n]] = i # {'u': 'sun', 'e': 'bed', 'a': 'car'}
sort_answer = sorted(answer.items()) #key값 기준으로 정렬 # [('a', 'car'), ('e', 'bed'), ('u', 'sun')]
answer = []
for j in range(len(strings)):
answer.append(sort_answer[j][1])
answer
3) 어떻게 해결했나
- 리스트에 인덱스 n번째 음절과 전체 단어가 담긴 리스트를 넣은 뒤, 마지막에 각 리스트에 2번째 자리에 있는 전체 단어 반환
# strings = ["abce", "abcd", "cdx"]
# n = 2
def solution(strings, n):
list = []
answer = []
for a in strings:
list.append([a[n], a])
list.sort() # [['c', 'abcd'], ['c', 'abce'], ['x', 'cdx']]
for b in list:
answer.append(b[1])
return answer # ['abcd', 'abce', 'cdx']
4) 무엇을 새롭게 알았나
- 딕셔너리 사용 시 주의사항
① 사용 가능 자료형 - int, tuple, float, bool / 사용 불가능 자료 - set, list, dict
② 키값이 중복되면 마지막 값으로 덮어씌어짐
③ 순서가 없어서 인덱스 사용 불가
# 다른 사람 풀이 01
# sorted에 key 파라미터를 넣으면 key 기준으로 정렬
def strange_sort(strings, n):
'''strings의 문자열들을 n번째 글자를 기준으로 정렬해서 return하세요'''
return sorted(strings, key=lambda x: x[n])
# 다른 사람 풀이 02
# a~z까지 순서대로 문자열을 만든 뒤에, 하나씩 꺼내서 앞에 위치하면 단어를 리스트에 넣음
def strange_sort(strings, n):
lst = []
for i in "abcdefghijklmnopqrstuvwxyz":
for j in strings:
if j[n] == i: lst.append(j)
return lst
'TIL' 카테고리의 다른 글
[240328] 파이썬: 코드카타 49 & SQL: 코드카타 167 (0) | 2024.03.28 |
---|---|
[240327] 파이썬: 코드카타 48 & SQL: 코드카타 166 (0) | 2024.03.27 |
[240325] 파이썬: 코드카타 46 & SQL: 코드카타 161~164 (0) | 2024.03.25 |
[240322] 파이썬 실습 코드: 메모리 경량화 (with parquet) (0) | 2024.03.22 |
[240321] 파이썬: 코드카타 45 & SQL: 코드카타 158~160 (0) | 2024.03.21 |