본문 바로가기
스터디IT🌼/Algorithm

알아두면 좋은 파이썬 문법 _ for 코딩테스트

by 동백사과 2022. 10. 13.

🎯 리스트

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))

 


 

 

댓글