코딩라이브러리/파이썬

파이썬 정렬 sort, sorted (with 백준 2750, 5597, 1181)

유니네 라이브러리 2024. 5. 24. 19:12

파이썬 정렬은 sort(), sorted()를 사용한다.

내장함수 sort()

  • 이 메서드는 리스트 내 항목 간의 비교만 사용하여 정렬한다.
  • 정렬 후 리스트는 수정된 상태로 유지된다.
  • 반환값이 없다.
  • 리스트 타입만 사용 가능
A = ['a', 'd', 'e', 'c', 'b']
#sort() 는 반환값이 없다.
print(A.sort()) # None

A = ['a', 'd', 'e', 'c', 'b']
A.sort()
print(A) # ['a', 'b', 'c', 'd', 'e']

B = ['가', '다', '바','나']
B.sort()
print(B) # ['가', '나', '다', '바']

C = [3,2,1,11,4]
C.sort()
print(C) # [1, 2, 3, 4, 11]

D = ['3','2','1','11','4']
D.sort()
print(D) # ['1', '11', '2', '3', '4']

 

내장함수 sorted()

  • 리스트 내 항목들을 정렬하여 반환한다.
  • 정렬 후 리스트는 원본 그대로 유지된다.
  • 문자열, 리스트 모두 사용 가능.
  • 문자열은 정렬된 결과를 배열로 반환하기 때문에, 결과는 문자열 변경 필요
A = ['a', 'd', 'e', 'c', 'b']
# 정렬값을 반환한다.
print(sorted(A)) # ['a', 'b', 'c', 'd', 'e']
# A 원본은 그대로 유지된다.
print(A) # ['a', 'd', 'e', 'c', 'b']

A = 'adecb'
#배열로 반환
print(sorted(A)) # ['a', 'b', 'c', 'd', 'e']
#원본 그대로
print("".join(A)) # adecb
#다른 변수에 저장
B = sorted(A)
print("".join(B)) # abcde

A = ['a', 'd', 'e', 'c', 'b']
#역정렬은 reverse=True 사용
print(sorted(A, reverse=True)) # ['e', 'd', 'c', 'b', 'a']
print(A) # ['a', 'd', 'e', 'c', 'b']

 

※ 역정렬은 이전 링크 글 참고

 

파이썬 문자열 거꾸로 해보기 (with 백준 1251 6438)

문자열 거꾸로 하는 방법은 3가지가 있다.문자열 슬라이싱으로 처리하기문자열을 리스트로 변환하고 reverse() 함수 사용하기sorted(iterable, reverse=True) 내장함수 사용하기.리스트로 반환된다#1.문자

yuneenelife.tistory.com

이차원배열 정렬

  • List[ [A, B] ]에서 sorted()는 기본적으로 A의 값으로 정렬한다.
  • B 의 값으로 정렬을 위해서는 Key 인수를 통해서 정렬한다.
A = [['a','하늘'], ['d','바람'],['c','구름']]
print(sorted(A)) # [['a', '하늘'], ['c', '구름'], ['d', '바람']]
print(sorted(A, key=lambda x:x[1])) # [['c', '구름'], ['d', '바람'], ['a', '하늘']]
print(A) # [['a', '하늘'], ['d', '바람'], ['c', '구름']]

 

▶ sort 연습 백준 문제 풀이

https://www.acmicpc.net/problem/2750

"""
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 
둘째 줄부터 N개의 줄에는 수가 주어진다. 
이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
"""
#입력값 받기
no = int(input())
lst = [int(input()) for _ in range(0, no)]
#문제풀이
lst.sort()
print(*lst, sep="\n")

"""
입력값
5
5
2
3
4
1
출력값
1
2
3
4
5
"""

 

▶ sorted 연습 백준 문제 풀이

https://www.acmicpc.net/problem/5597

"""
입력
입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다.
출석번호에 중복은 없다.
출력
출력은 2줄이다. 
1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.
"""
#입력값 받기
inputRow = [input() for _ in range(28)]
rtn = []
#문제풀이
for i in range(1, 31):  
    if (inputRow.count(str(i)) == 0):
        rtn.append(i)
#내장함수 sorted 사용한다.        
sorted(rtn)
print(*rtn, sep="\n")

 

▶ sorted key 연습 백준 문제 풀이

https://www.acmicpc.net/problem/1181

"""
입력
첫째 줄에 단어의 개수 N이 주어진다. 
(1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 
주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
"""
N = int(input())
lst = [input() for _ in range(N)]

#리스트 중복제거 set() 사용
a=list(set(lst))
# 리스트 값의 길이가 짧고 사전순으로 정렬
rtn=sorted(a, key=lambda x: (len(x),x))
print(*rtn, sep="\n")

"""
입력
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours

출력
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
"""

 

☞ 파이썬 자습서 참고 사이트

 

Built-in Functions

The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.,,,, Built-in Functions,,, A, abs(), aiter(), all(), a...

docs.python.org