728x90
https://school.programmers.co.kr/learn/courses/30/lessons/250121
내 코드
def solution(data, ext, val_ext, sort_by):
answer = []
for d in data:
if ext == "code":
if d[0] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
elif ext == "date":
if d[1] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
elif ext == "maximum":
if d[2] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
else:
if d[3] < val_ext: # ext 값이 val_ext보다 작은 데이터
answer.append(d)
if sort_by == "code":
answer = sorted(answer, key=lambda x:x[0])
elif sort_by == "date":
answer = sorted(answer, key=lambda x:x[1])
elif sort_by == "maximum":
answer = sorted(answer, key=lambda x:x[2])
else:
answer = sorted(answer, key=lambda x:x[3])
return answer
풀면서도 마음에 들지 않는 코드였다.
딕셔너리로 풀어야하는 것은 알고 있었는데, 어떻게 적용해야할지 감이 안왔다ㅠㅠ
그래도 접근 방식은 떠올릴 수 있으니 다행인 것인가,,
연습이 많이 필요한듯하다.
다른 사람 풀이
def solution(datas, ext, val_ext, sort_by):
answer = []
dic = {
"code" : 0,
"date" : 1,
"maximum" : 2,
"remain" : 3
}
order = dic[ext]
sortIdx = dic[sort_by]
for data in datas:
if data[order] < val_ext:
answer.append(data)
answer.sort(key = lambda x:x[sortIdx])
return answer
다른 사람이 푼 풀이를 보면,,
먼저 데이터 인덱스에 맞는 딕셔너리를 하나 만든다.
문제에서 제공해주는 값에 맞는 인덱스를 뽑아내기 위해..
어떤 정보를 기준으로 데이터를 뽑아낼지(ext)를 order로 지정하고
정보를 정렬할 기준의 인덱스를 sortIdx로 지정한다.
이제 데이터 배열을 순회하며, 뽑아낼 데이터를 선택하고,
정렬할 기준(sortIdx)에 맞춰 데이터를 정렬한다!
2차원 배열 정렬하기
파이썬 sort() 내장함수로 1차원 배열을 쉽게 정렬할 수 있다.
arr = [2,3,4,5,1]
arr.sort()
# 오름차순
arr.sort(reverse = True)
# 내림차순
2차원 배열의 정렬은 기준을 명시해주는 것이 필요한데
# 기준 명시X (-> arr[i]를 기준으로 오름차순 정렬)
arr = [[2,3],[1,2],[0,4]]
arr.sort()
print(arr)
# [[0, 4], [1, 2], [2, 3]]
기준을 명시한다면
arr = [[2,3],[1,2],[0,4]]
arr.sort(key=lambda x:x[0])
print(arr)
# [[0, 4], [1, 2], [2, 3]]
# 이 때, x값에 -를 취하면 내리림차순 정렬 가능
# arr.sort(key=lambda x: -x[0])
만약, 다중 조건을 명시하고 싶다면
arr = [[2, 3], [1, 2], [0, 4], [2, 2]]
arr.sort(key=lambda x: (x[1], x[0]))
print(arr)
# [[1, 2], [2, 2], [2, 3], [0, 4]]
로 할 수 있다!
끄읏-!
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 배열 만들기 1 (0) | 2024.01.30 |
---|---|
[프로그래머스][PYTHON] Lv. 1 달리기 경주 (1) | 2024.01.30 |
[프로그래머스][PYTHON] Lv. 1 최소직사각형 (1) | 2024.01.26 |
[프로그래머스][PYTHON] Lv. 0 세로 읽기 (0) | 2024.01.23 |
[프로그래머스][PYTHON] Lv. 0 문자열 여러 번 뒤집기 (1) | 2023.12.29 |