Learn to share,Share to learn
파이썬 알고리즘 팁 정리 본문
- 이차원 배열: C++과 달리 쉽게 이차원 배열을 초기화하는 방법을 배웠다.
를 사용해 100x100 크기의 배열을 만들 수 있다two_dimensional_array = [[0] * 100 for _ in range(100)]
- 리스트 컴프리헨션: 리스트 컴프리헨션에 대해 배웠다. 간결한 문법으로 리스트를 생성하는 Pythonic한 방법인것이다.
'할 일', '반복 횟수', '조건'을 한 줄에 표현하는데, '어떤 것을 할지(What)', '얼마나 할지(How Much)', '어떤 상황에서 할지(When)'라는 세 가지 관점으로 이해하는 것이 좋다는 것을 알게 되었다.
even_numbers = [i for i in range(10) if i % 2 == 0]
- 제너레이터 표현식: 리스트 컴프리헨션과 유사하지만, 모든 값을 메모리에 저장하지 않고 필요할 때마다 하나씩 생성하여 메모리를 효율적으로 사용한다.
행렬의 각 행의 합을 순차적으로 생성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)
- B진법 수를 10진법으로 변환하기: B진법 수를 10진법으로 변환하는 방법을 배웠다. 문자열의 각 문자를 순차적으로 순회하고, 각 자리가 알파벳인지 숫자인지 구분하여 해당 자리의 10진법 값을 계산한다. 그리고 해당 자리의 가중치를 곱한 후 총합에 더하는 방식으로 변환한다.
- print 함수의 end 매개변수: print 함수에서 end=''는 출력 후에 줄바꿈(\n)을 하지 않고, 대신 지정된 문자(여기서는 빈 문자열)를 사용한다는 것을 배웠다. 이를 통해 같은 줄에 연속해서 여러 값을 출력할 수 있다.
print("Hello", end=" ") print("World") # 출력: Hello World print("Hello", end="") print("World") # 출력: HelloWorld
- 생성자를 찾기 위해 각 자리수의 합을 구할때, 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))
- 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 # 올바른 조합을 찾으면 루프를 종료
-
최대 최소값에 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을 사용하여 이를 유일한 조합으로 줄입니다.
- permutations: 순열은 주어진 요소들의 모든 가능한 배열을 생성합니다. 이 경우, 요소들의 순서가 중요합니다. 예를 들어, ['+', '-', '*']에 대해 길이 2의 순열을 구하면 ('+', '-'), ('-', '+') 모두 다른 결과로 취급됩니다.
- combinations: 조합은 주어진 요소들의 가능한 조합을 생성합니다. 여기서는 순서가 중요하지 않습니다. 같은 예시에서 길이 2의 조합을 구하면 ('+', '-')는 ('-', '+')와 동일하게 취급되어 하나의 결과만 나옵니다.
2편으로 계속..
'알고리즘' 카테고리의 다른 글
특정값 존재여부 비교 - list와 set를 중심으로 (0) | 2024.01.17 |
---|---|
14052 파이썬 (0) | 2024.01.16 |
14888 파이썬 - 무한으로 최대값 설정하기, 순열 (0) | 2024.01.16 |
2745 파이썬 - 지수연산자 (1) | 2024.01.10 |
알고리즘 정리 (0) | 2024.01.09 |