프로그래머스 - 특이한 정렬

이로운·2023년 6월 3일
0

파이썬

목록 보기
5/9

문제

필요 지식

lambda

문법

lambda 매개변수: 식

예시1

add = lambda x,y : x + y
print(add(2,3)) # 출력 5

x와 y를 받아서 적혀있는 식에 따라서 5를 반환

예시2

numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, numbers)
print(list(squared))  # 출력: [1, 4, 9, 16, 25]
  1. map을 사용해서 새로운 리스트를 반환함
  2. numbers 각 요소 x를 제곱 하여 새로운 리스트를 생성하고 squared에 넣는다

문제 풀이

접근방법

  • n과 가까운 수를 리스트에서 찾으려면 numlist 각 요소(x) 에서 n을 빼서 차이를 확인하면됨.
    -> list의 각 요소를 확인해서 하나씩 빼려면 lambda가 편함, 새로운 배열로 반환하지 않아도 원래 배열로 해결할 수 있기 때문에 map은 사용하지 않는다)
  • 단, 음수가 나올 수 있기 때문에 절대값을 찾아야함
  • 만약 절대값이 같은 경우가 있다면 n에서 numlist 각 요소를 뺀 다음, 그 값이 작은 것을 먼저 넣으면 됨(요소중 더 큰 수는 n-x를 하게될때 큰수가 x여서 음수가 나올 수 밖에 없다)
  • lambda를 사용하기 때문에 key를 사용하여 key 순서대로 소팅 하면 됨

코드 작성

def solution(numlist, n):
    result = sorted(numlist,key = lambda x : (abs(x-n), n-x))
    return result
# 1. sorted를 사용하여 numlist를 정렬함, 단 key를 기준으로 정렬함
# 2. key란 무엇인가
	# 2-1. lambda를 사용
		# 2-1-1. numlist의 각 요소는 x임
		# 2-1-2. 그 x는 절대값 x-n의 절대값을 기준으로 정렬(n과 가까운 순으로 정렬된다)
		# 2-1-3. 만약 그 값이 겹친다면 다음 식(n-x)을 실행함
# 3. 그 결과를 result에 할당한다
profile
이름 값 하는 개발자가 꿈인 사람

0개의 댓글