코딩테스트 준비 - 2

2022. 5. 15. 23:15프로그래밍 언어/코딩테스트준비

파이썬



추가문법 ( 정렬 위주 )


다 표현식

  • lambda x : x+2 
    - 람다 매개변수 : 리턴값
  • 람다 사용하기 1. 변수에 할당하기
    - plus_func = lambda x : x+2
    - plus_func(1) --> 3
  • 람다 사용하기 2. 내장함수의 인자로 사용
    -  내장함수의 인자로 사용할때 편리 (특히 map함수)
    - map함수는 입력되는 변수에 특정 함수들을 적용시켜주는 내장함수
    - a = [1, 2, 3]
    - list( map ( str, a ) ) --> ["1", "2", "3"]
    - list( map ( plus_func, a ) ) --> [3, 4, 5]
    - list( map ( lambda x : x+2, a ) ) --> [3, 4, 5]

 

정렬

  • sorted( 리스트, key = 람다문법 )
lst = [[3,3],[4,2],[1,2],[6,4],[2,8],[7,2],[9,1]]

# 1. 첫번쨰원소로 오름차순 정렬
value = sorted(lst, key=lambda x:x[0])
print(value) # [[1, 2], [2, 8], [3, 3], [4, 2], [6, 4], [7, 2], [9, 1]]

# 2. 두번째원소로 오름차순 정렬
value = sorted(lst, key=lambda x:x[1])
print(value) # [[9, 1], [4, 2], [1, 2], [7, 2], [3, 3], [6, 4], [2, 8]]

# 3. 첫번째 원소로 내림차순 정렬
value = sorted(lst, key=lambda x:-x[0]) # -를 붙여줌
print(value) # [[9, 1], [7, 2], [6, 4], [4, 2], [3, 3], [2, 8], [1, 2]]

value = sorted(lst, key=lambda x:x[0], reverse=True)
print(value) # [[9, 1], [7, 2], [6, 4], [4, 2], [3, 3], [2, 8], [1, 2]]

# 4. 첫번째 원소 오름차순, 두번째 원소 내림차순 정렬
# 두가지를 기준으로 할려면, x:(튜플) 형태를 사용하면된다.
# lst = [[3,3],[4,2],[1,2],[1,1],[6,4],[2,8],[7,2],[9,1]]
value = sorted(lst, key=lambda x:(x[0],-x[1]))
print(value) # [[1, 2], [1, 1], [2, 8], [3, 3], [4, 2], [6, 4], [7, 2], [9, 1]]

 

functools 함수

  • key 사용하기 응용 ( functools.cmp_to_key(함수명) )
# 프로그래머스 정렬문제 ( 가장 큰 수 )

import functools

def cmp_func(str1,str2):
    x = str1 + str2
    y = str2 + str1
    
    # return 1 --> 입력 str1, str2 둘중에 str1이 좌측으로 간다. 
    if int(x)>int(y):
        return 1
        
    # return -1 --> 입력 str1, str2 둘중에 str2가 좌측으로 간다.
    elif int(x)<int(y):
        return -1
        
    # return 0 --> 얜 뭘까? 아직 모르겠다...
    else:
        return 0

import functools

def solution(numbers):

    num = list(map(str,numbers))
    num = sorted(num, key=functools.cmp_to_key(cmp_func), reverse=True)
    
    ans_str = ''.join(num)
    answer = ans_str
    return answer
  • functools 의 reduce 사용하기 --> reduce 는 데이터를 집계할때 사용한다.
from functools import reduce

iter_list = [1,2,3,4,5]

# --> ((((1+2)+3)+4)+5)
result = reduce(lambda x,y:x+y, iter_list)  # 15


# 초기값 설정가능
result = reduce(lambda x,y:x+y, iter_list, 3)  # 18