코딩 문제

백준 - 단어정렬 (조건이 있는 정렬)

토리쟁이 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])