[백준] 11650번_좌표정렬하기

EunJi·2023년 9월 12일
0

Algorithm

목록 보기
4/5

문제

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


코드

  • sorted(x), x.sort() 두가지 방법 모두 가능.
  • 단, 해당 문제에서는 원본 List를 저장할 필요성이 없어 x.sort() 메소드를 사용하는 것이 더 적합해 보임.
# input
def custom_input():    
    # 점 개수
    n = int(input())

	# 좌표
    dot_list = []
    for _ in range(n):
        dot_list.append(list(map(int, input().split())))
    
    return dot_list

# 정렬
def solution(dot_list):
    dot_list.sort(key = lambda x: (x[0], x[1]))
    # dot_sorted = sorted(dot_list, key = lambda x: (x[0], x[1]))

    
    for (x, y) in dot_list:
    # for (x, y) in dot_sorted:
        print("%d %d" %(x, y))

dot_list = custom_input()
solution(dot_list)

[생각의 흐름]

  • sort 함수를 사용하여 key 설정을 해주면 되겠다.

[설명]

  • list(map())을 사용하여 list 형태로 점의 좌표를 받아들인다. -> 2차원 배열 생성
  • sort함수를 사용하여 배열을 정렬한다.
    sort 기준을 key parameter를 통해 설정해준다.
arr.sort(key = lambda x: (x[0], x[1]))
'''
lambda: input 값을 x라고 할 때
(x[0], x[1]): x[0]을 key값으로 설정하고,
	x[0]이 같을 경우, x[1]을 기준으로 설정.
'''

깨달음

[오류]

dot_sorted = dot_list.sort(key = lambda x: (x[0], x[1]))
  • list.sort()는 결과값을 반환하지 않는다.
  • 해당 메소드는 원본을 직접 수정한다. (단, sorted(x)는 결과 값을 반환 함)

[오류 수정]

dot_list.sort(key = lambda x: (x[0], x[1]))

OR

dot_sorted = sorted(dot_list, key = lambda x: (x[0], x[1]))
...
for (x, y) in dot_sorted:
...

궁금점

1. Python의 정렬 알고리즘

Merge, Quick, Insertion, Bubble,Selection 등 여러가지 정렬 알고리즘이 있는데,
과연 Python의 sort 함수는 어떤 정렬 알고리즘을 사용하는걸까?

Python은 TimeSort 알고리즘을 사용한다.!
** 네이버 기술 블로그에 설명이 잘되어 있다!
https://d2.naver.com/helloworld/0315536

2. sorted(x) VS x.sort()

[ x.sort(): 리스트형 메소드 ]

  • list에만 사용 가능
  • list의 원본값 직접 수정
  • 반환값 X

[ sorted(x): 파이썬 내장 함수 ]

  • 입력값으로 어떤게 와도 가능.
  • 원본값을 그대로 유지
  • 작업 수행 후 반환값 0
profile
말하는 감자

0개의 댓글