본문 바로가기

반응형

분류 전체보기

(168)
[Python] list, set, dict 컨테이너 알고리즘을 하면서 주의할 점이 list, set, dict 등의 컨테이너 타입을 쓸 때이다. 컨테이너 타입은 일반적으로 복사를 하게 되면 주소값이 들어가 변경하게 되면 복사된 값까지 그대로 옮겨가게 되기 때문이다. s = set() s.add(1) ss = s s.add(2) print(ss) # 결과 {1,2} l = [tuple()]*17 l[0] = (1,2) ll = l l[0] = (1,3) print(ll) # [(1, 3), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()] 그러므로 복사를 하기 위해선 copy에 있는 deepcopy를 사용 혹은 리스트 컴프리헨션을 사용하여 복사해줘야 한다.
[Python] 위상정렬 위상 정렬은 기본적으로 N번 만큼만 수행한다. N개의 원소의 순서를 알아내는 것이기 때문이다. 이를 이용해 알아낼 수 있는 정보들이 있다. 첫번째: 사이클 발생 첫번째로 N번 만큼 수행할 동안 큐안에 0개의 원소가 들어있다면 사이클이 발생했다는 것이다. 그 이유는 위상 정렬을 할 때 indegree를 감소시키는데 이 값이 0일때만 큐 안에 들어간다. 하지만 사이클이 있어 한번 더 진입을 하게되면 큐 안에 값이 들어갈 수 없기 때문이다. 두번째: 순서 불분명 두번째로 큐 안에 2개 이상의 원소가 들어가있다면 순서가 확실하지 않아 여러 순서가 발생할 수 있는 것이다. indegree 값이 0인 값이 여러개가 존재하게 되면 큐 안에 2개 이상의 원소가 들어가게 되는데 이는 동시에 들어간 노드의 순서가 불분명하..
[Python] for else Python에는 for else 문법이 존재한다 이 문법은 for 안에서 break문으로 인해서 강제 종료가 된다면 else문을 실행하지 않고 아니면 실행하는 문법이다. N = int(input()) M = int(input()) def find_parent(parent,x): if parent[x] != x: parent[x] = find_parent(parent,parent[x]) return parent[x] def union_parent(parent,a,b): a = find_parent(parent,a) b = find_parent(parent,b) if a < b: parent[b] = a else: parent[a] = b parent = [i for i in range(N+1)] for i..
[Python] 블록 이동하기 https://programmers.co.kr/learn/courses/30/lessons/60063 코딩테스트 연습 - 블록 이동하기 [[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]] 7 programmers.co.kr 1. 이해하기 (1,1)에서 시작하여 (N,N)에 도착하는데 걸리는 최소 시간을 구해야 한다. 로봇은 두 칸을 차지한다. 로봇은 회전과 이동이 가능하다. 회전 시 조건에 맞아야 회전이 가능하다. 로봇이 항상 목적지에 도착할 수 있는 경우만 입력으로 주어진다. 2. 구현하기 걸리는 최소 시간을 구하기 위해서는 BFS를 이용하여 구현이 가능하다. 그 이유는 회전, 이동 모두 가중치가 1이기 때문..
[Python] 시간초과가 난다면 1. 입출력 속도를 높여본다. import sys input = sys.stdin.readline 2. 파이썬이라서 시간 초과가 나는 것이 아닌지 고민해본다. 자바 혹은 c++로 풀면 통과가 되는 경우가 있다. 예시> https://www.acmicpc.net/problem/18290 18290번: NM과 K (1) 크기가 N×M인 격자판의 각 칸에 정수가 하나씩 들어있다. 이 격자판에서 칸 K개를 선택할 것이고, 선택한 칸에 들어있는 수를 모두 더한 값의 최댓값을 구하려고 한다. 단, 선택한 두 칸이 인접� www.acmicpc.net 위의 경우가 아니라면 대부분 로직이 잘못됐다는 이야기 일 것이다. 새로운 알고리즘을 짜 보자
[Python] set 소소한 팁 set안에 값을 넣고 특정 값이 있는지 찾고 싶다면 x in set 이렇게 사용하면 된다. 예시로 set안에 좌표값을 넣고 그 좌표에 도착했는지 여부를 알고싶다면 (x,y) in set 이렇게 쓰면 유용하다.
Decorator 반복하는 내용을 함수로 묶어 여러 함수에서 일괄적으로 사용할 때 사용 def type_checker(func): def inner_function(digit1, digit2): if type(digit1) != int or type(digit2) != int: print('only integer support') return func(digit1,digit2) return inner_function @type_checker def test(digit1,digit2): print(digit1+digit2) 이런식으로 @만을 이용하여 함수에 적용할 수 있다. @를 이용하면 type_checker안에 파라미터로 test 함수가 들어가는 방식이다. 안에 파라미터가 들어간 데코레이터도 만들 수 있다 def mar..
First class function, Closure First Class Function이란? 함수를 변수처럼 사용할 수 있는 것을 말한다. def calc(a,b) return a+b t = calc t(1,2) 추측하기론 이름이 너무 길거나 알고리즘에서 sys.stdin.readline을 input으로 짧게 사용하기 위해 사용할 것이라 생각한다. Closure란? 외부 함수, 내부 함수 관계에서 외부 함수가 del 되어도 내부 함수는 외부 함수에 있는 선언들을 가져다 사용할 수 있는 것을 말한다. def calc_power(n): def power(digit): return digit ** n return power t = calc_power(10) t(2)