barcode

백준 11650, 11651번 풀이

BOJ/[BOJ] Python

문제

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

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

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

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

 

Reference

https://haesoo9410.tistory.com/193

 

<파이썬> 2차원 배열 정렬

1. 기본적인 리스트 정렬 * sort 정렬  - sort는 리스트에서 제공되는 기본적인 메서드이다. 주로 아래와 같이 사용한다. lst = [2, 3, 5, 6, 1, 4] lst.sort() print(lst) # [1, 2, 3, 4, 5, 6]  - sort 는 기..

haesoo9410.tistory.com

 

풀이

일단 문제의 기본 골자는 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])

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

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 10814번 풀이  (0) 2022.09.29
백준 1181번 풀이  (0) 2022.09.29
백준 25501번 풀이  (0) 2022.09.13
백준 1427번 풀이  (0) 2022.08.23
백준 2108번 풀이  (0) 2022.08.23