코딩 문제
백준 - 단어정렬 (조건이 있는 정렬)
토리쟁이
2022. 7. 21. 23:22
해당 문제는 정렬 sort 사용시 옵션에 key 값으로 조건을 걸어 해당 조건으로 정렬하면 쉽게 풀리는 문제이다.
리스트명.sort(key=lambda: 적용할 함수)
만약, 다중 조건을 건다면 => (조건1, 조건2) 이렇게 괄호로 묶을 것
위 문제에 대한 풀이는 다음과 같다.
import sys
n=int(input())
string=[]
for i in range(n):
string.append(sys.stdin.readline().strip())
string = list(set(string))
string.sort(key= lambda x: (len(x), x))
for i in string:
print(i)
정렬의 첫 번째 기준은 단어의 길이순, 두 번째 기준은 사전순 정렬이다.
길이가 같은 단어가 있을 경우, 두 번째 기준에 따라서 정렬을 수행한다.
굳이 함수를 쓰지 않아도 되는 경우도 있다.
풀이)
n= int(input())
num=[]
number=[]
for i in range(n):
num.append(input().split())
for i in num:
i=list(map(int, i))
number.append(i)
number.sort(key=lambda x:(x[1], x[0]))
for i in number:
i=" ".join(str(j) for j in i)
print(i)
위 문제는 리스트 안에 리스트들이 들어온다.
[ [0,4], [1,2], [1,-1], [2,2], [3,3] ]
여기서 각 리스트의 두 번째 요소를 첫 번째 기준요소로 잡고, 두 번째 요소를 두 번째 기준으로 잡으면 된다.
따라서, 함수를 쓸 필요없이 단순하게 key = (x[1], x[0] )를 작성하면 되는 문제이다.
2023.01.03 복습 코드
위의 코드와 로직은 같지만, 더 클린하게 작성함
n = int(input())
s = []
for i in range(n):
s.append(list(map(int, input().split())))
s.sort(key = lambda x: (x[1], x[0]))
for i in s:
print(i[0], i[1])