[algorithm] 백준 11650 - 좌표 정렬하기
안녕하세요. 심심한 코딩쟁이입니다.
오늘은 백준 11650번 문제 - 좌표 정렬하기 의 풀이를 살펴보도록 하겠습니다.
풀이에 사용한 언어는 Python3 입니다.
문제 해석과 풀이 다 함께 살펴보시죠.
백준 BAEKJOON 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% 정도 입니다.
아마도 좌표를 정렬하는 과정에서 사소한 실수로 인해 오답을 제출한 경우가 대부분일 것 입니다.
정렬과 관련된 문제들은 주어지는 시간이나 메모리를 신경쓰면서 코딩해보시길 바랍니다.
감사합니다.
반응형
'programming > algorithm' 카테고리의 다른 글
[algorithm] 백준 1181 - 단어 정렬 (0) | 2023.04.17 |
---|---|
[algorithm] 백준 11651 - 좌표 정렬하기2 (0) | 2023.04.16 |
[algorithm] 백준 1427 - 소트인사이드 (0) | 2023.04.14 |
[algorithm] 백준 10989 - 수 정렬하기3 (0) | 2023.04.13 |
[algorithm] 백준 2751 - 수 정렬하기2 (0) | 2023.04.12 |