1. 문제
2. 내가 생각했던 첫번째 풀이과정
1) 좌표를 list로 입력받는다
2) 입력된 좌표의 x축을 비교하고, 그 다음 y축을 비교한다.
3) 숫자 2개를 비교하여 값에 따라 버블 정렬을 통해 정렬해주려고 했다
4) 시간초과 관계로 다른 풀이 과정을 생각해보게 되었다
3. 내가 생각했던 두번째 풀이과정
sorted() 함수에 대해 찾아보았다.
sorted() 함수는 sorted라는 정렬함수는 시퀀스 자료형 뿐만 아니라 순서에 구애받지 않는 자료형에도 적용할 수 있고 정렬된 결과는 list로 반환된다는 것을 알았습니다.
이를 통해 풀이를 수정하였습니다.
3. 나의 풀이
N = int(input())
location = []
for i in range(N):
temp = list(map(int, input().split()))
location.append(temp)
sort_location = sorted(location)
for i in range(N):
print(sort_location[i][0], sort_location[i][1])
4. 다른 사람의 풀이
N = int(input())
array = []
for _ in range(N):
x, y = map(int,input().split())
array.append((x,y))
array.sort()
array.sort(key= lambda x : x[0])
for i in array :
print(*i)
람다를 사용하여 정렬하신 풀이도 볼 수 있었습니다.
5. 새로 알게된 점
sorted 정렬함수
#str
sorted("hello")# ["e","h","l","l","o"]
#list
sorted([5,2,1,3,4])# ["1","2","3","4","5"]
sorted([[2,1,3],[3,2,1],[1,2,3]])# [[1, 2, 3], [2, 1, 3], [3, 2, 1]]
#set
sorted({3,2,1})# [1,2,3]
#tuple
sorted((3,2,1))# [1,2,3]
#dict
sorted({3:1,2:3,1:4})# [1,2,3]
위 결과에서 볼 수 있듯이 dictionary를 소팅할때는 key값을 추출해서 소팅하는 것을 알 수 있습니다. 그렇다면 value값을 기준으로 정렬할 수는 없을까요? sorted함수의 파라미터인 key를 이용하면 가능합니다.
#dict
myDict = {3:1,2:3,1:4}
# [(3, 1), (2, 3), (1, 4)]
sorted(myDict.items(),key=lambda x: x[1])
# 2번째 문자를 기준으로 정렬(각각 e, i, y)
# ["hello", "hi", "python"]
sorted(['hello','hi', 'python'],key=lambda x:x[1])
만약 내림차순으로 정렬하고 싶은경우에는 파라미터 reverse 값을 true로 만들어 주면됩니다.
sorted(range(1,10),reverse=True)
# [9, 8, 7, 6, 5, 4, 3, 2, 1]
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[Baekjoon] 백준 알고리즘 - 11047: 동전 0 (0) | 2021.03.26 |
---|---|
[Baekjoon] 백준 알고리즘: 11399번- ATM (0) | 2021.03.23 |
[Baekjoon] 백준 알고리즘: 2750 - 수 정렬하기 (0) | 2021.03.01 |
[Baekjoon] 백준 알고리즘: 5622 - 파이썬 (0) | 2021.01.05 |
[Baekjoon] 백준 알고리즘 2908: 상수 - 파이썬 (0) | 2021.01.03 |
댓글