[Python] 코테 보기 전 정리하면 좋은 테크닉 모음

밀루·2023년 4월 14일
0

백준 문제풀이

목록 보기
43/51

List

sort

numbers.sort(key=lambda x : (x*4)[:4], reverse=True)
# 프로그래머스 가장 큰 수
# ['3', '30', '34', '5', '9'] -> ['9', '5', '34', '3', '30'] 글자를 4번 붙여넣은 뒤 첫 자리가 큰 숫자를 앞에 두는 테크닉

numbers.sort(key=lambda x : (x[0], x[1]))
# [(-8, 1), (-7, 1), (2, 3), (-5, 0)] -> [(-8, 1), (-7, 1), (-5, 0), (2, 3)]

리스트 리턴

numbers = 	['9', '5', '34', '3', '30']
answer = ''.join(numbers)
# answer = "9534330"

print(*numbers)
# 9 5 34 3 30

리스트 추가, 삭제

a.insert(1, 5) #1번째 인덱스에 요소 5 추가 [1, 5, 2, 3]

del a[1] # 1번째 인덱스 삭제
a.remove(아이템) #아이템에 해당하는 요소 삭제
del a[a.index("a")] 
# a라는 요소의 인덱스를 불러와 해당 인덱스 삭제 -> 결국 a 아이템을 삭제함
a.pop(0) # 0번째 인덱스에 해당하는 요소를 가져온 후 삭제함
a.pop() # 마지막 요소를 취득하고 삭제함 (stack에서 유용하게 사용됨)

set 요소

s = {}
s.add(1)
s.update([7, 8, 9]) # s = {1, 7, 8, 9}
s.remove(7) # s = {1, 8, 9}

문자열 다루기

Split

a = input().split('-')
# -를 기준으로 받은 인풋을 나눔

from collections import

deque

from collections import deque

q = deque()
q.append("a")
while q:
	now = q.popleft() #a

heapq

import sys, heapq
input = sys.stdin.readline

N = int(input())
schedules = sorted([list(map(int, input().split())) for _ in range(N)])
h = []
for start, end in schedules:
    if h and h[0] < start:
        heapq.heappop(h)
    heapq.heappush(h, end)
    

print(len(h))

heapq 관련 함수를 사용할 때는 꼭 리스트를 인자로 넣어줘야한다.
이는 백준 수강신청 https://www.acmicpc.net/source/58781927 관련 풀이

defaultdict

from collections import defaultdict

d = defaultdict(list) # 디폴트 value가 빈 리스트로 저장
d = defaultdict(int) # 디폴트 value가 0으로 저장 

dictionary

del a[1]
a
# {2: 'b', 'name': 'pey', 3: [1, 2, 3]} 딕셔너리 a에서 1이란 키가 사라짐.

dic = defaultdict(list)
    for departure, arrival in tickets:
        dic[departure].append(arrival)
    for key in dic.keys():
        dic[key].sort()
    # print(dic)
    # {'ICN': ['ATL', 'SFO'], 'SFO': ['ATL'], 'ATL': ['ICN', 'SFO']})

밑 코드는 여행경로에서 사용한 테크닉 https://school.programmers.co.kr/learn/courses/30/lessons/43164

문자열 변환

알파벳 -> 숫자 변환

print(ord("A")) # 65
print(ord("Z")-ord("A")) #25

리스트 -> 문자 변환

lst = ['a', 'b', 'cd']
print(''.join(lst)) # abcd
print('/'.join(lst)) #a/b/cd

For문을 이용한 리스트 생성

DFS/BFS에서 많이 쓰이는 테크닉

[False for _ in range(N)]
# [False, False, False, False... ]

[[0 for _ in range(3)] for _ in range(4)]
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

[(i, j) for i in range(5) for j in range(5)]
# [(0, 0), (0, 1) ... ]

uf = [i for i in range(7)]
# [0, 1, 2, 3, 4, 5, 6]

그 외 테크닉

rotation 90

def rotate_90(array):
    ver, hor = len(array), len(array[0])
    new_array = [[array[-j + ver - 1][i] for j in range(ver)] for i in range(hor)]
    return new_array

이때 4번 이상 회전하지 않도록 while rotate_cnt < 4: 조건 등을 붙여줘야 한다.

조합, 순열

from itertools import combinations, permutations
positions = [(i, j) for i in range(5) for j in range(5)]
combs = list(combinations(positions, 7))


arr = ['A', 'B', 'C']
nPr = permutations(arr, 2)
print(list(nPr))
# 결과 : [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

소문난 칠공주 백준 https://www.acmicpc.net/problem/1941 문제에서 사용한 테크닉

profile
벨로그에 틀린 코드나 개선할 내용이 있을 수 있습니다. 지적은 언제나 환영합니다.

0개의 댓글