[Python] 알고리즘 풀 때 자주 사용하는 문법 정리 (2022.11.20 ver)

MinsHouse·2022년 7월 18일
1

🌱 공부하면서 자주 보는 것들이지만 기억이 안나는 것들 및 배운 것 정리 + 계속 수정하면서 업데이트 하겠습니당😎
(2022.07.29 ver)

1. Slicing

  • 처음엔 리스트만 slicing이 되는 줄 알았다.🥺 slicing은 리스트 뿐만 아니라 문자열도 가능하다.
  • slicing은 [:] 를 사용한다.
    : 앞쪽은 slicing이 시작되는 부분을 의미하며 0부터 시작한다.
    : 뒤쪽은 slicing이 끝나는 부분을 의미하며 뒤쪽 값의 -1을 한 값이 된다.
  • ex) 리스트 slicing
arraySlicing = [1,2,3,4,5,6,7,8,9,10]
ans1 = arraySlicing[:] # 전체 다 불러온다.
print(ans1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ans2 = arraySlicing[3:] # 0부터 시작하기에 3이 아닌 4부터 시작한다.
print(ans2) # [4, 5, 6, 7, 8, 9, 10]
ans3 = arraySlicing[:4] # 4번째 값인 5에서 끝나는 것이 아니라 -1을 해줘서 3번째 값 즉, 4에서 끝난다.
print(ans3) # [1, 2, 3, 4]
ans4 = arraySlicing[2:5] # 2번째 값인 3에서 5번째 값이 아니라 -1을 해준 4번째 값에서 끝나기에 3,4,5가 된다.
print(ans4) # [3, 4, 5]
  • ex) 문자열 slicing
strSlicing = "12345678"
ans5 = strSlicing[:] # 전체 다 불러온다.
print(ans5)
ans6 = strSlicing[3:] # 0부터 시작하기에 3이 아닌 4부터 시작한다.
print(ans6)
ans7 = strSlicing[:4] # 4번째 값인 5에서 끝나는 것이 아니라 -1을 해줘서 3번째 값 즉, 4에서 끝난다.
print(ans7)
ans8 = strSlicing[2:5] # 2번째 값인 3에서 5번째 값이 아니라 -1을 해준 4번째 값에서 끝나기에 3,4,5가 된다.
print(ans8)
  • 문자열 및 List에서 중간에 원하는 값 삽입
    -문자열:
s = "123456"
newstring = "9"
index = 1
s = s[:index] + newstring + s[index+1:]
print(s) # "193456"
# 이런식으로 사용하면 중간에 원하는 문자열을 삽입할 수 있다. 
# s[:] 안에 있는 값들을 잘 조정하여 원하는 값을 삽입할 수 있다.

-List

s = [1,2,3,4,5,6]
newList = [9]
index = 1
s = s[:index] + newList + s[index + 1:]
print(s) # [1, 9, 3, 4, 5, 6]
# 문자열은 string값을 중간에 넣었지만 List는 List를 넣어줘여한다. 그 외는 문자열과 똑같다.

참고 자료: https://stackoverflow.com/questions/41752946/replacing-a-character-from-a-certain-index

2. for in

3. 다양한 Input값

  • split(): 문자열 나누기
num = list(map(int, input().strip().split()))
print(num) # [1, 2, 3, 4, 5]
  • 한 줄씩 입력받고 싶을 때
N = int(input())
NList = []
for i in range(N):
    NList.append(int(input()))
# 5 --- N 입력값
# 2 --- N의 값 만큼 한줄로 입력
# 3
# 4
# 5
# 1
  • 빠르게 input값 입력(시간 감축👍)
from sys import stdin
input = stdin.readline

N = int(input())
# input 입력할 때 시간이 적게 든다. 추천!!!!

4. lambda

5. 연산자

  • "/": 나누기
print(12/6) # 2.0 (float이라고 생각하면 될 것 같다.)
  • "//": 나누기 연산 후 소수점 이하의 수를 버리고, 정수 부분의 수만 구한다.
print(12/6) # 2 (int라고 생각하면 될 것 같다.)
  • "%": 나누기 연산 후 나머지만 구한다.
print(12%6) # 0
print(18%4) # 2

6. 리스트를 문자열로 변환

  • "".join() 사용하기
arr = ["1", "2", "3", "4", "5"]
strArr = "".join(arr)
print(strArr) # 12345
# 만약 1 2 3 4 5 이렇게 공백을 넣고 싶으면 ""를 " "로 스페이스만 추가해주면 된다.
# ""안에 넣고 싶은 것을 넣으면 문자열 사이에 ""안에 들어간 요소가 추가된다.

예외)
arr = [1, 2, 3, 4, 5]
strArr = "".join(arr)

print(strArr) # 이렇게 하면 배열 안이 문자열이 아닌 숫자이기에 오류가 발생한다.

7. 배열 만들기

  • 1차원 배열 만들기
arr = list(map(int, input())) # 띄어쓰기 없이 입력받고 싶을 때 사용
# 12345 이렇게 입력해야한다. 1 2 3 4 5 이렇게 입력 시 오류

arr = list(map(int, input().split()))
# 1 2 3 4 5 이렇게 입력. split()때문에 띄어쓰기를 통해 구분한다.

N = int(input())
NList = []
for i in range(N):
    NList.append(int(input()))
# 5 --- N 입력값
# 2 --- N의 값 만큼 한줄로 입력
# 3
# 4
# 5
# 1
  • 2차원 배열 만들기
# 원소 하나씩 입력받기
arr = [for _ in range(B)] # 2차원 배열의 가로길이 : B

for i in range(B):        
	arr[i] = list(map(int, input().split()))
    
# 원소에 list 추가하기
arr = []

for i in range(B):    # 2차원 배열의 가로길이 : B
	arr.append(list(map(int, input().split())))
    
# 선언과 동시에 입력받기
arr = [list(map(int, input().split())) for _ in range(B)]   # 2차원 배열의 가로길이 : B

참고자료: https://dailylifeofdeveloper.tistory.com/132

  • 2차원 배열 정렬
arr = [[1, 3], [3, 4], [2, 1], [0, 5]]
sortArr = sorted(arr)
print(sortArr)
# sortArr = [[0, 5], [1, 3], [2, 1], [3, 4]]
# arr[i][j] 의 i 값의 순서대로 정렬된다.

arr = [[1, 3], [3, 4], [2, 1], [0, 5]]
arr.sort(key = lambda x:x[0]) # x[0]이 arr[i][j]에서 i를 뜻한다.
print(arr)
# arr = [[0, 5], [1, 3], [2, 1], [3, 4]]

8. Counter 정렬 (dictionary)

9. heapq

  • heapq 사용: 최소값 및 최대값을 빠르게 찾기 위해서 사용하면 좋다. O(logN) 시간 복잡도
import heapq # heapq 사용하기 위해서 import해준다.


arr = [3, 5, 1, 7, 4, 2] # heapify를 사용하면 기존의 리스트를 heap으로 바꿔준다.
heapq.heapify(arr)
print(arr) # [1, 4, 2, 7, 5, 3]

# heappush를 사용하여 heap에 넣을 수 있다. 그리고 heappush를 하면 자동으로 정렬이된다. 
# 즉 아래의 예를 보면 4,7,2,3순으로 push했지만 정렬이 되어 2, 3, 4, 7이 된다.
heap = [] 
heapq.heappush(heap, 4) 
heapq.heappush(heap, 7)
heapq.heappush(heap, 2)
heapq.heappush(heap, 3)
print(heap) # [2, 3, 4, 7]

heapq.heappop(heap) # heappop을 사용하면 최소값을 제거하고 정렬한다. 즉, 앞의 2, 3, 4, 7에서 2를 제거하고 정렬한다.
print(heap) # [3, 7, 4]

# 주의 - heap의 맨 앞이 최소값이지만 그 다음 값이 최소값의 다음 값이 아닐 수도 있다.
heap[0] # heap의 최소값

참고자료: https://www.daleseo.com/python-heapq/

profile
MiniBee

0개의 댓글