일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 시나공
- MYSQL
- kotlin
- 파이썬
- 백준 알고리즘
- 코딩교육봉사
- python
- 문제풀이
- 정보처리산업기사
- 자바
- 백준
- 코틀린
- SQL
- 공부일지
- java
- 소프티어
- SW봉사
- 알고리즘
- 백준알고리즘
- programmers
- CJ UNIT
- 회고
- C++
- 프로그래머스
- softeer
- 데이터베이스
- 스프링
- BFS
- 1과목
- 코딩봉사
Archives
- Today
- Total
JIE0025
[이것이코딩테스트다] ch6 정렬 본문
728x90
개념 복습은 나중으로 미루고 문제만 풀어보려고 가져왔다.
✅ 파이썬의 정렬 라이브러리
⏺ sorted()
- 파이썬 기본 정렬 라이브러리
- 병합정렬을 기반으로 만들어짐
- O(NlogN) 보장
- 리스트, 딕셔너리, 자료형 등을 입력받아 정렬된 결과를 출력함.
⏺ sort()
내부요소 바로 정렬
arr = [7,5,2,9,0,3,1,6,4,8]
arr.sort()
result = sorted(arr)
>> [0,1,2,3,4,5,6,7,8,9]
arr.sort(reverse=True)
result = sorted(arr, reverse=True)
>> [9,8,7,6,5,4,3,2,1,0]
⏺ key를 이용해서 정렬기준 정하기
- key에는 하나의 함수가 들어가야한다.
- 람다를 사용하는 방식을 많이 사용한다
💻 1번째 요소를 기준으로 정렬하기
array = [('바나나',2),('사과', 5), ('당근', 3)]
result = sorted(array, key = lambda x : x[1] )
💻 길이를 기준으로 정렬하기 (오름차순)
array = ['but','i','wont','hesitate','no','more','no','more','it','cannot','wait','im','yours']
array.sort(key = lambda x : len(x) )
💻 다중 조건 정렬
- 다중 정렬 조건을 설정하려면, 튜플로 우선순위가 높은 순서대로 적으면 됨
- -를 붙이면, 현재 정렬차순과 반대로 된다.
arr = [(1, 3), (0, 3), (1, 4), (1, 5), (0, 1), (2, 4)]
# 첫번째 인자를 기준으로 오름차순 먼저 정렬
# 첫번째 인자 값이 같을 경우, 두번째 인자를 기준으로 내림차순 정렬
arr.sort(key = lambda x : (x[0], -x[1]))
# arr = [(0, 3), (0, 1), (1, 5), (1, 4), (1, 3), (2, 4)]
data_list.sort(key = lambda x :(x[1], x[0]))
⏺ dict 정렬
✔️ key값을 기준으로 정렬, key리스트를 반환
d = {..}
>>> sorted(d)
- dict 안의 key를 올림차순으로 정렬한 key 리스트를 반환해준다.
이때 key가 아닌 value로 정렬하려면 lambda를 사용해주면 된다.
✔️ value값을 기준으로 정렬, key 리스트 반환
>>> sorted(d, key= lambda x : dict[x])
✔️ key값을 기준으로 정렬, (key-value) 리스트 반환, dict()
dict = {'A' : 1, 'D' : 4, 'C' : 3, 'B' : 2}
# ✅ Key를 이용한 정렬
# items() 함수는 key-value 쌍이 tuple로 구성된 리스트가 리턴되므로 딕셔너리를 key기준 정렬하려면 이렇게 사용한다.
sorted(dict.items())
# [('A', 1), ('B', 2), ('C', 3), ('D', 4)]
# ⏺ 내림차순 설정
dict = sorted(dict.items(), reverse=True)
# [('D', 4), ('C', 3), ('B', 2), ('A', 1)]
# ⏺ 리스트가 반환되므로 해당 정렬된것을 딕셔너리로 반환하려면 dict()를 사용하면된다.
dict(sorted(dict.items())
✅ 2 : 위에서 아래로
💻 CODE
import sys
input = sys.stdin.readline
n = int(input())
nums = [int(input()) for _ in range(n)]
nums.sort(reverse=True)
print(*nums)
✅ 3 : 성적이 낮은 순서로 학생 출력하기
💻 CODE
# 3 성적이 낮은 순서로 학생 출력하기 180p
import sys
input = sys.stdin.readline
n = int(input())
info = [list(map(str,input().split())) for _ in range(n)]
info.sort(key= lambda x:int(x[1]))
for i in info:
print(i[0], end=' ')
✅ 4 : 두 배열의 원소 교체
# a는 오름차순 정렬,
# b는 내림차순 정렬해서
#k = 3
#a = 1 2 3 4 5
#b = 6 6 5 5 5일 떄
# index 0~ 3될때까지 반복, a원소가 더 작으면 바꾸기.
만약 a원소가 b원소보다 크면 끝내기!
💻 CODE
import sys
input = sys.stdin.readline
n,k = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
a.sort()
b.sort(reverse=True)
for i in range(k):
if (a[i]<b[i]):
a[i], b[i] = b[i],a[i]
else:
break
print(sum(a))
'알고리즘' 카테고리의 다른 글
[최단경로] 플로이드워셜 python (0) | 2023.01.25 |
---|---|
[코딩테스트] 문자열 다루는 방법 정리 (python) (0) | 2023.01.24 |
[이것이코딩테스트다] ch4 구현 (0) | 2023.01.21 |
[이것이코딩테스트다] ch3 그리디 (Greedy) (0) | 2023.01.21 |
[ 알고리즘 ] 슬라이딩 윈도우 (0) | 2022.05.27 |