목록알고리즘 (57)
어디까지 갈 수 있을까?
문제링크 https://www.acmicpc.net/problem/1062 1. set()은 문자열로 넣어도 원소 하나하나로 접근한다는 점 2. combination에 현재 list 길이보다 큰 값이 들어오면 combination 함수가 돌아가지 않는다는 점 3. set() 연산 : |= 합집합, - 차집합 을 배웠다. [답코드] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import sys from itertools import combinations input = sys.stdin.readline n, k = map(int, input().split()..
문제링크 https://www.acmicpc.net/problem/16940 order 배열에 노드별 우선순위를 담은 다음 그를 이용해 graph를 정렬하는 문제이다 order의 인덱스 : 노드 번호 order의 value : 우선순위 sort() 함수가 굉장히 다방면으로 쓰일 수 있어 신기했다 [답코드] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import sys from collections import deque input=sys.stdin.readline def bfs(s): visited=[False]*(n+1) ..
목적 시작노드에서 각 노드까지 최단거리를 구하는 알고리즘 O(ElogV)의 시간 복잡도를 갖는다 우선순위 큐로 거리가 짧은 노드를 우선적으로 탐색한다 BFS는 가중치가 같은(없는) 그래프에서, 다익스트라는 가중치가 서로 다른 그래프에서 사용한다 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import heapq import sys input = sys.stdin.readline INF = int(1e9) n, m = map(int, input().split()) start=int(input()) graph = [[] for i in range(n + 1)] ..
문제링크 https://programmers.co.kr/learn/courses/30/lessons/43164 [답코드] def dfs(cand, visit, target): global n, answer if len(visit) == n: answer.append(visit+[target]) return for i, v in enumerate(cand): if v[0] == target: dfs(cand[:i] + cand[i + 1:], visit + [v[0]], v[1]) def solution(tickets): global n, answer n = len(tickets) answer = [] for i, v in enumerate(tickets): if v[0] == "ICN": dfs(tick..
문제링크 programmers.co.kr/learn/courses/30/lessons/42579 1. sort() 활용 잘하기, -붙이면 reverse=True 와 같은 역할 함 [답코드] def solution(genres, plays): answer = [i for i in range(len(genres))] dict = {} for i in range(len(genres)): if genres[i] not in dict: dict[genres[i]] = plays[i] else: dict[genres[i]] += plays[i] answer.sort(key=lambda x: (-dict[genres[x]], -plays[x], x)) genre_dict = {} ret=[] for j in answ..
문제링크 programmers.co.kr/learn/courses/30/lessons/42890 [정리] 1. 전치행렬 만들기 list(map(list, zip(*relation))) 2. append는 ()안 요소 전체를 추가 하지만 extned는 ()안 요소 하나하나를 접근해 배열에 추가 3. set()으로 만들 값은 변형 불가능한 값이어야 하기 때문에 원소들을 tuple로 변형시킨다 4. 최소성 만족을 위해 set(j).issubset(i) ex) j=[1,2,2] i=[1,2,3] 일 때도 = (하위집합 j에 중복되는 원소가 있을 때도) 상위집합의 부분집합으로 인정하기 위해 set(j)를 붙여주는 걸로 추정 [답코드] from itertools import combinations def solut..
문제링크 programmers.co.kr/learn/courses/30/lessons/17679 1. 전치행렬을 만들어주기 위해 list(map(list, zip(*board))) 1-1. list를 unpacking 하기 위해 * 1-2. zip()은 tuple을 반환하는데 tuple은 값 변경이 안 되니 list로 바꿔줌 1-3. map()은 주소값을 반환하기 때문에 list()로 묶어줌 2. 중복되는 원소를 넣지 않기 위해 set() / set.add() [답코드] import copy def solution(m, n, board): answer = 0 board = list(map(list, zip(*board))) #*는 리스트를 unpacking 한다 while True: remove=set(..