백준 11650, 11651번 풀이

문제

주어진 좌표를 정렬하는 문제. 참고로 두 문제가 정렬 방식이 다른데 11650번은 x좌표 기준, 11651번은 y좌표 기준이다.

Reference

https://haesoo9410.tistory.com/193

풀이

일단 문제의 기본 골자는 XY 좌표를 받아서 요구조건대로 정렬하는 것이다. 그리고 좌표를 어떻게 받을거냐… 2차원 배열로 받을거다.

import sys
N = int(sys.stdin.readline())

array = [[list(map(int,sys.stdin.readline().split()))] for j in range (N)]
array.sort()

for x in array:
    for y in x:
        print(y[0],y[1])

11650번은 이렇게만 해도 된다.

import sys
N = int(sys.stdin.readline())

array = [[list(map(int,sys.stdin.readline().split()))] for j in range (N)]
array.sort(key = lambda x:(x[0][1], x[0][0]))

for x in array:
    for y in x:
        print(y[0],y[1])

11651번은 익명함수 김람다씨를 불러야되는데… y좌표를 기준으로 먼저 오름차순 정렬을 하고 y좌표가 같으면 x좌표 오름차순으로 정렬하는거라 이렇게 하면 된다. 저거 여러개 묶을거면 튜플로 해야된다.

근데 하다보니까 자꾸 인덱스 에러나서 봤더니 배열이 ㅋㅋㅋㅋㅋㅋ 삼중이여 ㅋㅋㅋㅋㅋㅋ 원래 이차원 배열이면 [[1,2],[3,4],[1,5]] 이런 식이어야 되는데 저 코드로 만든 배열은 대괄호가 하나 더 있는거라. 그래서 정리했다.

import sys
N = int(sys.stdin.readline())

array = [list(map(int,sys.stdin.readline().split())) for j in range (N)]
array.sort(key = lambda x:(x[1],x[0]))

for x in array:
    print(x[0],x[1])

강제로 고차원행 된 배열에 묵념을 표합시다.