[백준 11650] 좌표 정렬하기

코뉴·2021년 1월 28일
0

백준🍳

목록 보기
16/149

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

🥚문제


🥚입력/출력


🍳코드

import sys
n = int(sys.stdin.readline())
data = []
for i in range(n):
    x, y = map(int, sys.stdin.readline().split())
    data.append((x, y))
# 첫 번째 인자인 x 좌표를 기준으로 오름차순으로 정렬
# 두 번째 인자인 y 좌표를 기준으로 오름차순으로 정렬
data.sort(key=lambda xy:(xy[0], xy[1]))
for xy in data:
    print(xy[0], xy[1])

🧂아이디어

  • 첫 시도에는 딕셔너리를 이용해 정렬했으나, 시간초과가 떴다.
# 좌표 정렬하기
n = int(input())
data = dict() # 딕셔너리형 자료 형태
for i in range(n):
    x, y = map(int, input().split())
    # x:[y1, y2...] 형태의 딕셔너리
    if x in data:
        data[x].append(y)
    else:
        data[x] = [y] # 리스트 형태로 삽입
# x 좌표가 증가하는 순으로
# x 좌표가 같으면 y 좌표가 증가하는 순서로
for key in sorted(data.keys()):
    # 만약 x 좌표가 같은 게 없으면 단순 출력
    if len(data[key]) == 1:
        print(key, data[key][0])
    # x 좌표가 같으면
    elif len(data[key]) >= 2:
        # y 좌표가 증가하는 순서로
        for value in sorted(data[key]):
            print(key, value)

🔼 첫 시도에 제출한 코드. 파이썬의 dictionary 자료형을 사용하고 있다.

  • 두 번째 시도에서는 아래 참고에서도 알 수 있듯이, 복수의 정렬 조건이 있을 때, 그 우선순위를 순서대로 key의 lambda 식에 넣어 주면 된다는 것을 알게 되어 이를 적용했다. + input을 sys.stdin.readline()으로 바꿔주었다. 결과는 통과!

  • 파이썬 정렬의 다중조건! 반드시 기억해두자.

  • 참고 출처: https://dailyheumsi.tistory.com/67

profile
코뉴의 도딩기록

0개의 댓글