Learn to share,Share to learn

파이썬 알고리즘 팁 정리 본문

알고리즘

파이썬 알고리즘 팁 정리

Rogue One 2024. 1. 10. 18:20
  1. 이차원 배열: C++과 달리 쉽게 이차원 배열을 초기화하는 방법을 배웠다.
    two_dimensional_array = [[0] * 100 for _ in range(100)]​
    를 사용해 100x100 크기의 배열을 만들 수 있다
  2. 리스트 컴프리헨션: 리스트 컴프리헨션에 대해 배웠다. 간결한 문법으로 리스트를 생성하는 Pythonic한 방법인것이다. 
    '할 일', '반복 횟수', '조건'을 한 줄에 표현하는데, '어떤 것을 할지(What)', '얼마나 할지(How Much)', '어떤 상황에서 할지(When)'라는 세 가지 관점으로 이해하는 것이 좋다는 것을 알게 되었다. 
    even_numbers = [i for i in range(10) if i % 2 == 0]​
  3. 제너레이터 표현식: 리스트 컴프리헨션과 유사하지만, 모든 값을 메모리에 저장하지 않고 필요할 때마다 하나씩 생성하여 메모리를 효율적으로 사용한다.
    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    row_sums = (sum(row) for row in matrix)
    for sum in row_sums:
        print(sum)​
    행렬의 각 행의 합을 순차적으로 생성
  4. B진법 수를 10진법으로 변환하기: B진법 수를 10진법으로 변환하는 방법을 배웠다. 문자열의 각 문자를 순차적으로 순회하고, 각 자리가 알파벳인지 숫자인지 구분하여 해당 자리의 10진법 값을 계산한다. 그리고 해당 자리의 가중치를 곱한 후 총합에 더하는 방식으로 변환한다.
  5. print 함수의 end 매개변수: print 함수에서 end=''는 출력 후에 줄바꿈(\n)을 하지 않고, 대신 지정된 문자(여기서는 빈 문자열)를 사용한다는 것을 배웠다. 이를 통해 같은 줄에 연속해서 여러 값을 출력할 수 있다.
    print("Hello", end=" ")
    print("World")  # 출력: Hello World
    print("Hello", end="")
    print("World")  # 출력: HelloWorld
  6. 생성자를 찾기 위해 각 자리수의 합을 구할때, divmod를 쓰는 방법, sum(map(int,str(i)))를 쓰는 방법, for j in str(i): i += int(j)를 쓰는 방법이 있다.숫자를 분리할수있다는걸 잘 기억하기
    number = 1234
    sum_of_digits = sum(map(int, str(number)))
    # 또는
    sum_of_digits = sum(int(j) for j in str(number))
  7. itertools.combinations: Python의 itertools 모듈에서 제공하는 combinations 함수는 입력된 반복 가능한 객체에서 지정된 길이의 모든 가능한 조합을 생성한다. combinations(list, 7)은 리스트에서 7개의 요소를 선택하는 모든 조합을 생성한다.
    from itertools import combinations
    #백설공주 9명중 7명 키 100문제
    
    dwarf_list = []
    for _ in range(9):
        dwarf_list.append(int(input()))
    
    for combination in combinations(dwarf_list, 7):
        if sum(combination) == 100:
            sorted_combination = sorted(combination)  # 오름차순으로 정렬
            for height in sorted_combination:
                print(height)
            break  # 올바른 조합을 찾으면 루프를 종료
  8. 최대 최소값에 1e9 넣었다가 오류 날수있음. 그냥 float("inf") 사용해야함

     

    9. operators = ['+'] * add + ['-'] * sub + ['*'] * mul + ['/'] * div

    와 같이 연산자 입력 받을수 있다.

     

    10. 7785번 https://www.acmicpc.net/problem/7785 딕셔너리 사용법

     

     

     

     

    set(permutations(operators, N - 1))

    • permutations(operators, N - 1): 이 함수는 itertools 모듈의 permutations 함수를 사용하여, operators 리스트 내의 요소들로 만들 수 있는 길이가 N - 1인 모든 가능한 순열(조합)을 생성합니다.
    • set(...): 생성된 순열들을 set으로 변환하여 중복을 제거합니다. 같은 연산자 조합이 여러 번 나타날 수 있기 때문에, 각 조합을 유일하게 만들기 위해 set을 사용합니다.

    예를 들어, 만약 operators가 ['+', '+', '-', '*']이고 N이 5라면, permutations(operators, 4)는 이 연산자들로 만들 수 있는 모든 4개의 조합을 생성합니다. 그러나 같은 연산자 조합이 여러 번 나타날 수 있으므로, set을 사용하여 이를 유일한 조합으로 줄입니다.

     

     

    1. permutations: 순열은 주어진 요소들의 모든 가능한 배열을 생성합니다. 이 경우, 요소들의 순서가 중요합니다. 예를 들어, ['+', '-', '*']에 대해 길이 2의 순열을 구하면 ('+', '-'), ('-', '+') 모두 다른 결과로 취급됩니다.
    2. combinations: 조합은 주어진 요소들의 가능한 조합을 생성합니다. 여기서는 순서가 중요하지 않습니다. 같은 예시에서 길이 2의 조합을 구하면 ('+', '-')는 ('-', '+')와 동일하게 취급되어 하나의 결과만 나옵니다.

     

    2편으로 계속..