ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 문법
    algorithm/이것이 취업을 위한 코딩테스트다 2023. 8. 24. 14:35

    리스트 컴프리헨션

    # 0부터 9까지의 수를 포함하는 리스트
    array = [i for i in range(10)]
    
    # 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
    array = [i for i in range(20) if i % 2 == 1]
    
    # 1부터 9까지의 수들의 제곱 값을 포함하는 리스트
    array = [i * i for i in range(1, 10)]

    so-리스트 컴프리헨션은 2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다.

    - 특히 N x M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 매우 유용하다.

        ㆍ좋은 예시 : array = [[0] * m for _ in range(n)]

    - 만약 2차원 리스트를 초기화할 때 다음과 같이 작성하면 예기치 않은 결과가 나올 수 있다.

        ㆍ잘못된 예시 : array = [[0] * m] * n

        ㆍ위 코드는 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식된다.

     

    리스트 관련 기타 메서드

    함수명 사용법 시간 복잡도
    append() 변수명.append() O(1)
    sort() 변수명.sort() O(NlogN)
    변수명.sort(reverse = True)
    reverse() 변수명.reverse O(N)
    insert() insert(삽입할 위치 인덱스, 삽입할 값) O(N)
    count() 변수명.count(특정 값) O(N)
    remove() 변수명.remove(특정 값) O(N)

     

    리스트에서 특정 값을 가지는 원소를 모두 제거하기

     a = [1,2,3,4,5,5,5]
     remove_set = {3,5}
     
     result = [i for i in a if i not in remove_set]

     

     

    튜플을 사용하면 좋은 경우

    - 서로 다른 성질의 데이터를 묶어서 관리해야 할 때

        ㆍ최단 경로 알고리즘에서는 (비용, 노드 번호)의 형태로 튜플 자료형을 자주 사용

    - 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때

        ㆍ튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있다.

    - 리스트보다 메모리를 효율적으로 사용해야 할 때

     

    사전 자료형

    - 파이썬의 사전 자료형은 해시 테이블(Hash Table)를 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다

     

    집합 자료형

    -  특징 : 중복 허용 X, 순서가 없다.

    - 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다.

     

    빠르게 입력 받기

    import sys
    
    data = sys.stdin.readline().rstrip()

     

    global 키워드

    - global 키워드로 변수를 지정하면 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.

    a = 0
    
    def func():
        global a
        a += 1
        
    for i in range(10):
        func()
    
    print(a) # 10

    - 리스트의 경우 오류없이 수행 가능

    array = [1,2,3,4,5]
    
    def func():
        array.append(6)	# [1,2,3,4,5,6]

     

    람다 표현식 예시

    - 내장 함수에서 사용

    sorted(array, key=lambda x: x[1])

    - 여러 개의 리스트에 적용

    list1 = [1,2,3,4,5]
    list2 = [6,7,8,9,10]
    
    result = map(lambda a,b: a+b, list1, list2)
    
    print(list(result)) # [7,9,11,13,15]

     


    실전에서 유용한 표준라이브러리

    - 내장 함수 : 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공한다.

    - itertools : 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들 제공

        ㆍ특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용

    - heapq : 힙(Heap) 자료구조를 제공한다. 

        ㆍ일반적으로 우선순위 큐 기능을 구현하기 위해 사용 - 다익스트라 최단 경로 문제

    - bisect : 이진 탐색(Binary Search) 기능을 제공

    - collections : 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함한다.

    - math : 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함

     

    순열과 조합

    - 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것 (순서고려)

        ㆍnPr = n * (n - 1) * (n - 2) * ... * (n - r + 1)

    from itertools import permutations
    
    data = ['A', 'B', 'C']
    
    result = list(permutations(data, 3))	# 모든 순열 구하기

    - 조합 : 서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것

        ㆍnCr = ( n * (n - 1) * (n - 2) * ... * (n - r + 1) ) / r! 

    from itertools import combinations
    
    data = ['A','B','C']
    
    result = list(combinations(data, 2))	# 2개를 뽑는 모든 조합

     

    - 중복 순열

    from itertools import product
    
    data = ['A','B','C']
    
    result = list(product(data, repeat=2))	# 2개를 뽑는 모든 순열 구하기(중복허용)

    - 중복 조합

    from itertools import combinations_with_replacement
    
    data = ['A','B','C']
    
    result = list(combinations_with_replacement(data, 2))	# 2개를 뽑는 모든 조합 구하기(중복 허용)

     

     

    Counter

    - 리스트와 같은 반복 가능한(iterable) 객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지를 알려준다.

    from collections import Counter
    
    counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
    
    print(counter['blue'])
    print(counter['green'])
    print(dict(counter))

     

    최대 공약수와 최소 공배수

    import math
    
    # 최소 공배수(LCM)를 구하는 함수
    def lcm(a,b):
        return a * b // math.gcd(a,b)
        
    a = 21
    b = 14
    
    print(math.gcd(21, 14))	# 최대공약수(GCD) 계산
    print(lcm(21,14))	# 최소공배수(LCM) 계산

    댓글

Designed by Tistory.