일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스택
- cv2
- 3D
- Deeplearning
- 큐
- numpy
- Threshold
- 딥러닝
- 임계처리
- re-identification
- level2
- Python
- NLP
- attention
- 자료구조
- OpenCV
- Computer Vision
- flame
- reconstruction
- Object Detection
- 프로그래머스
- transformer
- 알고리즘
- center loss
- 논문 구현
- deep learning
- Object Tracking
- point cloud
- Knowledge Distillation
- 파이썬
- Today
- Total
공돌이 공룡의 서재
[프로그래머스 Level 1] 문자열 내 마음대로 정렬하기 / 연습문제 / 파이썬 본문
<문제>
<풀이> ※ lambda 사용 X
def solution(strings, n):
# Dictionary 이용
answer = []
box = {}
#1
for i in range(len(strings)):
box[strings[i][n]] = []
#2
for i in range(len(strings)):
box[strings[i][n]].append(strings[i])
box[strings[i][n]] = sorted(box[strings[i][n]])
#3
criterion = sorted(list(box.keys()))
for i in range(len(criterion)):
for j in range(len(box[criterion[i]])):
answer.append(box[criterion[i]][j])
return answer
코드 설명:
dictionary를 이용했는데 5번째 문제조건때문에 코드가 좀 길어졌다. 우선 처음 2줄에서 answer 배열과 dictionary에 해당하는 변수(box)를 선언.
#1 -> dictionary에 key값들을 다 넣어줬는데 맨 처음에는 value 값을 빈 배열로 선언해주었다.
#2 -> #1 과정에서 value를 빈 배열로 선언했기 때문에 다른 문자에서 중복되는 key값이 있을 경우 사전순으로 정렬되게끔 할 수 있다.
#3 -> key값들을 정렬하고 차례차례 key값에 있는 value값들을 꺼내어 answer에 append시켜준다. 여기서 #2 과정때문에 다시 정렬할 필요가 없다.
+@:
더 짧고 간단하게 코드를 짤 수 있을까 하고 다른 사람들의 풀이를 찾아보니 내장함수 sorted의 key= 와 lambda를 이용한 풀이가 있었다.
def solution(strings, n):
return sorted(strings,key = lambda a:[a[n],a])
(1) sorted는 파이썬 내장함수고 기본적인 Big-O는 NlogN이므로 배열의 길이가 클 땐 정렬 알고리즘을 따로 작성하는게 좋다. 인수로는 정렬할 배열(type은 list), key(정렬할 기준), reversed(오름차순, 내림차순 결정. 따로 설정하지 않으면 False로 작은 값이 먼저 오는 오름차순이나 True로 선언해주면 큰 값이 먼저 오는 내림차순으로 바뀐다.)
(2) key값이 lambda 형태로 작성되어 있다. lambda (사용할 변수):(연산) 형태로 작성하는데 [a[n], a] 의 의미는 strings 안의 원소의 n번째 값을 기준을 우선으로 정렬하고, 이후에는 나머지를 보고 판단하여 정렬한다는 의미이다. lambda에 대해서는 좀 더 공부를 해봐야겠다.
참고: https://docs.python.org/3/howto/sorting.html
'코딩 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Level 1] 크레인 인형뽑기 / 2019 카카오 개발자 겨울 인턴십 / 파이썬 (0) | 2020.09.02 |
---|---|
[프로그래머스 Level 2] 다리를 지나는 트럭 / (스택/큐) / 파이썬 (0) | 2020.08.29 |
[프로그래머스 Level 1] 같은 숫자는 싫어 / 연습문제 / 파이썬 (0) | 2020.08.16 |
[프로그래머스 Level 1] K번째수 / 정렬 / 파이썬 (0) | 2020.07.15 |
[프로그래머스 Level 1] 체육복 / 탐욕법 / 파이썬 (0) | 2020.07.09 |