리셋 되지 말자

Tip 본문

알고리즘

Tip

kyeongjun-dev 2022. 2. 27. 16:14

정렬 시 비교 함수 사용

  • lambda 사용
  • functools의 cmp_to_key 사용

lambda

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

# 오름차순으로 정렬
# [1, 2, 3, 4, 5]
arr.sort(key=lambda x: x)
print(arr)

# 내림차순으로 정렬
# [5, 4, 3, 2, 1]
arr.sort(key=lambda x: -x)
print(arr)


arr2 = [
    [1, 9],
    [2, 3],
    [2, 4],
    [2, 5],
    [3, 1]    
]

# 첫 번째 원소로 오름차순, 두 번째 원소로 오름차순
# [[1, 9], [2, 3], [2, 4], [2, 5], [3, 1]]
arr2.sort(key=lambda x: (x[0], x[1]))
print(arr2)

# 첫 번째 원소로 오름차순, 두 번째 원소로 내림차순
# [[1, 9], [2, 5], [2, 4], [2, 3], [3, 1]]
arr2.sort(key=lambda x: (x[0], -x[1]))
print(arr2)

 

functools cmp_to_key

  • return -1 : 첫 번째 인자 기준으로, 두 번째 인자가 더 작다
  • return 1  : 첫 번째 인자 기준으로, 두 번째 인자가 더 크다
  • return 0  : 첫 번째 인자 기준으로, 두 번째 인자와 같다
from functools import cmp_to_key

# 오름차순 
def my_cmp_1(x, y):
    if x < y:
        return -1
    else:
        return 1

# 내림차순
def my_cmp_2(x, y):
    if x < y:
        return 1
    else:
        return -1

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

# 오름차순으로 정렬
# [1, 2, 3, 4, 5]
arr.sort(key=cmp_to_key(my_cmp_1))
print(arr)

# 내림차순으로 정렬
# [5, 4, 3, 2, 1]
arr.sort(key=cmp_to_key(my_cmp_2))
print(arr)

팩토리얼 - 내장함수

from math import factorial
print(factorial(4))
# output : 24

최단거리, 가장짧은 거리

문제에 '최단 거리를 구해라', '가장짧은 거리를 구해라' 가 목적이면, bfs와 dp를 고려하자

  • dp는 방문 순서가 정해진 케이스에서만 사용 가능하다. 백준 1697 - 숨박꼭질과 같은 문제에서는 dp 사용 불가

deep copy

  • 파이썬에서 배열을 복사할 때는 deep copy를 사용할 수 있다.
import copy

a = [1, 2, 3, 4]
b = a
print(a)
print(b)
# [1, 2, 3, 4]
# [1, 2, 3, 4]


a = [1, 2, 3, 4]
b = copy.deepcopy(a)
b[0] = 5
print(a)
print(b)
# [1, 2, 3, 4]
# [5, 2, 3, 4]

나머지가 0이 되지 않도록 하는 법

  • 4를 기준으로 나눌 때, 나머지가 0, 1, 2, 3 이지만 나머지가 1, 2, 3, 4 로 나오게 하려면 바꾸면 된다
  • 백준 6064 카잉달력
(n-1) % 4 + 1

bfs 탐색 순서 유의점

  • 백준 16928번과 같은 문제에서 유의할 점
  • 탐색 순서를 위, 왼쪽, 아래, 오른쪽 순서로 탐색한다고 해도
  • 시작 위치에서 위쪽만 먼저 탐색한다는 보장이 없다
  • 탐색할 수 있는 좌표를 저장만 해놓고, 정렬하여 찾는 방법등이 추가로 필요함

 

'알고리즘' 카테고리의 다른 글

class 4  (0) 2022.05.04
class 3  (0) 2022.03.01
[백준 18111] 마인크래프트 - 브루트포스  (0) 2022.01.20
[백준 1874] 스택 수열 - 스택  (0) 2022.01.19
[백준 1966] 프린터 큐 - 큐  (0) 2022.01.18
Comments