백준 11650번, lambda와 key를 이용해 특정 기준으로 배열 정렬하기

    문제

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

     

    11650번: 좌표 정렬하기

    첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

    www.acmicpc.net

    나의 풀이

    n=int(input())
    nList=[[0 for _ in range(2)] for _ in range(n)]
    for i in range(n):
        nList[i][0],nList[i][1]=map(int,input().split())
    nList.sort(key=lambda x: (x[0], x[1]))
    
    for i in range(n):
        print(nList[i][0],nList[i][1])

    2차원 배열을 정렬하기 위해 sort함수에서의 key와 lambda를 사용하여 정렬하였다.

    특정 기준으로 배열을 정렬하는 방법은 크게 3가지가 있다.

    1. key가 하나일 때 

    x를 기준으로 정렬하기

    arr = ['abc', 'bac', 'bca']
    sorted(arr, key=lambda x : x)

    arr에 속하는 각 원소들을 x라고 생각했을 때, x[0]을 기준으로 정렬하기

    arr = ['abc', 'bac', 'bca']
    sorted(arr, key=lambda x : x[0])

     

    2.key가 여러개일 때

    x[0]를 기준으로 정렬하고 같을 경우 x[1]를 기준으로 정렬하기

    arr = ['abb', 'acc', 'bcd']
    sorted(arr, key=lambda x : (x[0], x[1]))

    3. 내림차순 정렬

    x[0]는 내림차순, x[1]는 오름차순을 기준으로 정렬하기

    arr = ['abb', 'acc', 'bcd']
    sorted(arr, key=lambda x : (-x[0], x[1]))

     

    다른 사람의 풀이

    for p in sorted([tuple(map(int,input().split())) for i in range(int(input()))]):
        print(p[0], p[1])

    list comprehension을 사용한 풀이를 하였다.

    '알고리즘 공부' 카테고리의 다른 글

    백준 2257번, 스택 알고리즘  (0) 2023.01.27
    백준 1181번 sort와 key  (0) 2023.01.10
    백준 2108, Counter, list comprehension  (0) 2023.01.08
    백준 9020번, filter와 lambda  (0) 2023.01.02
    시간복잡도 구하기  (0) 2022.12.31

    댓글