🎯 리스트
a = [1,2,3,4,5]
a.append(2) # 리스트 원소 삽입
a.sort() # 리스트 정렬 - 오름차순
a.sort(reverse = True) # 리스트 정렬 - 내림차순
a.insert(2,3) # 인덱스 2에 3 추가
a.remove(2) # 인덱스 2 원소 삭제
# 특정 값 다 지우고 싶을 때
remove_set = set({3,4})
result = [i for i in a if i not in remove_set] # 리스트 컴프리헨션 사용
🎯 문자열
a = "python"
print(a * 3 ) # pythonpythonpython
🎯 집합 자료형
# 사전 자료형
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
for key in data.keys():
print(key)
for item in data.items():
print(item)
# 집합 자료형 set : 중복 제거
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])
print(a|b) # 합집합
print(a&b) # 교집합
print(a-b) # 차집합
a.update([9,10]) # 여러 원소 추가
a.remove(3) # 특정 값 원소 삭제
🎯 주요 라이브러리 문법과 유의점
내장함수 : print(), input() 과 같은 기본 입출력 기능부터 sorted( ) 와 같은 정렬 기능을 포함하고 있는 기본 내장 라이브러리
itertools : 파이썬에서 반복되는 형태의 데이터를 처리하는 기능 제공 라이브러리 -> permutations (순열), combinations(조합)
heapq : 힙 기능을 제공하는 라이브러리 , 우선순위 큐 기능을 구현하기 위해 사용
bisect : 이진 탐색 기능을 제공하는 라이브러리
collections : deque, Counter 등의 유용한 자료구조를 포함하고 있는 라이브러리
🎯 더 알아두면 좋은 알고리즘
1. 소수 판별 알고리즘
- 가운데 약수까지만 ' 나누어 떨어지는 지' 확인하면 됨
for i in range(2, int(math.sqrt(x))+1):
if x % i ==0:
return False
return True
2. 여러 개의 수 소수 판별 - 에라토스테네스의 체
- N보다 작거나 같은 모든 소수 찾을 때 사용 가능
* 순서 *
1. 2~ N 까지의 모든 자연수를 나열한다.
2. 남은 수 중에서 아직 처리하지 않은 가장 작은 수 i를 찾는다
3. 남은 수 중에서 i의 배수를 모두 제거한다. ( i 는 제거 X )
4. 더 이상 반복할 수 없을 때까지 2,3번을 반복한다.
# 1부터 n까지의 수 중 소수를 찾아내는..
import math
n =1000
array = [True for i in range(n+1)]
for i in range(2,int(math.sqrt(n))+1):
if array[i] == True: # i가 소수인 경우
j =2
while i*j <= n:
array[i*j]= False
j+=1
for i in range(2, n+1):
if array[i]:
print(i)
3. 투포인터
- 특정합을 가지는 부분 연속 수열 찾기에 사용 가능 ( 찾고자하는 합 : m, 결과값 : 수열 개수 )
1. 시작점과 끝점이 첫번째 원소의 인덱스를 가리키도록 한다.
2. 현재 부분합이 M과 같다면 카운트한다.
3. 현재 부분합이 M 보다 작다면 end 값을 증가시킨다.
4. 현재 부분합이 M 보다 크다면 start 값을 증가시킨다.
5. 모든 경우를 확인할 때까지 2~4번을 반복한다.
n = 5 # 데이터개수
m = 5 # 찾고자 하는 부분합
data= [1,2,3,4,5]
start, end = 0, 0
interval_sum = 0
for start in range(n):
while interval_sum < m and end < n :
interval_sum += data[end]
end+=1
if interval_sum == m:
count+=1
interval_sum -= data[start]
4. 구간합
1. n 개의 수에 대하여 접두사 합을 계산하여 배열 p에 저장
2. 매 m개의 쿼리 정보 [ left, right ] 를 확인할 때 , 구간 합은 p[right]-p[left-1] 이다.
n = 5
data= [10,20,30,40,50]
sum_value = 0
prefix_sum [0] # 접두사 합
for i in data:
sum_value +=i
prefix_sum.append(sum_value)
left, right = 3,4
result = prefix_sum[right]-prefix_sum[left-1]
print(result)
5. 순열과 조합
- 순열 : 서로 다른 n개에서 r 개를 선택하여 일렬로 나열하는 것
- 조합 : 서로 다른 n개에서 순서에 상관없이 서로 다른 r 개를 선택하는 것
import itertools
data = [1,2,3]
for x in itertools.permutations(data,2): # 순열
print(list(x))
for x in itertools.combinations(data,2): #조합
print(list(x))
'스터디IT🌼 > Algorithm' 카테고리의 다른 글
[ 완전탐색 ] 알고리즘 내용 정리 (0) | 2023.01.12 |
---|---|
[ DFS / BFS ] 알고리즘 문제 정리 (1) | 2022.10.13 |
[ BaekJoon ] 마법사 상어와 토네이도 _ 시뮬레이션 (0) | 2022.10.11 |
[ 프로그래머스 ] 네트워크 _ DFS (0) | 2022.10.09 |
[ Baekjoon ] 컨베이어 벨트 위의 로봇 _ 구현 (0) | 2022.10.05 |
댓글