본문 바로가기

programming/algorithm

[algorithm] 백준 11650 - 좌표 정렬하기

[algorithm] 백준 11650 - 좌표 정렬하기

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 백준 11650번 문제 - 좌표 정렬하기 의 풀이를 살펴보도록 하겠습니다.

 

풀이에 사용한 언어는 Python3 입니다.

 

문제 해석과 풀이 다 함께 살펴보시죠.

 

algorithm
알고리즘


백준 BAEKJOON 11650

 

백준 11650번 좌표 정렬하기 문제 보러가기

 

반응형

 

문제 해석

 

2차원 평면 위의 점 N개가 주어지고 각 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면

y좌표가 증가하는 순서로 출력하는 문제입니다.

문제 제목의 뜻 그대로 좌표를 x좌표와 y좌표 중 x좌표를 우선으로 오름차순 정렬하는 문제입니다.

x좌표가 같을 때는 y좌표를 기준으로 오름차순 정렬이 필요합니다.

 

풀이

 

# 11650 좌표 정렬하기

n = int(input())

coordinate = [list(map(int, input().split())) for _ in range(n)]

coordinate.sort()

for i in range(n):
    print(*coordinate[i])

 

풀이 해석 및 팁

 

이번 풀이에서는 리스트를 만들 때 사용한 comprehension 방식과 정답을 출력할 때 사용된 asterisk 방식에 대해

살펴보겠습니다.

일반적으로 리스트에 요소를 추가할 때 append 함수를 사용해서 추가해주기 마련입니다.

하지만 알고리즘 문제에서는 메모리 사용량과 시간에 제한이 걸려있는 경우도 존재합니다.

그렇기 때문에 평소에 메모리를 덜 사용하는 코딩 방식을 습관으로 들여놓으면 문제를 풀거나 실무에 적용할 때도

도움이 될 것입니다.

리스트를 만들 때 [ ] 안에 for 문을 넣어서 요소를 추가하는 것을 comprehension 방식이라고 부릅니다.

이는 일반적으로 append를 사용해 요소를 추가하는 것보다 메모리 사용량이 적고 실행시간도 짧아집니다.

그리고 정답을 출력할 때 사용한 asterisk(*)는 파이썬에서 여러가지 동작을 하지만 여기서는 unpacking의 기능을

하게됩니다.

for i in range(n):
    for j in coordinate[i]:
        print(j, end=' ')
    print('')

위 코드 처럼 for 반복문 두 개를 중첩해서 출력할 정답을

for i in range(n):
    print(*coordinate[i])

for 반복문 한 개로 처리가 가능해집니다.

반복문의 중첩 또한 시간과 메모리 사용에 영향을 끼치기 때문에 이렇게 간단하게 처리할 수 있는 방식을

몸에 익혀두시면 좋을 것 같습니다.

여기까지 백준 11650번 좌표 정렬하기 문제 풀이였습니다.

 

이번 문제의 정답률은 47% 정도 입니다.

 

아마도 좌표를 정렬하는 과정에서 사소한 실수로 인해 오답을 제출한 경우가 대부분일 것 입니다.

 

정렬과 관련된 문제들은 주어지는 시간이나 메모리를 신경쓰면서 코딩해보시길 바랍니다.

 

감사합니다.

반응형