본문 바로가기

반응형

파이썬

(12)
백준 11000번: 강의실 배정 파이썬 코드(우선순위 큐) import heapq import sys n = int(sys.stdin.readline()) heap = [] q = [] count = 0 for _ in range(n): start, end = map(int,sys.stdin.readline().split()) heapq.heappush(heap, [start,end]) start, end = heapq.heappop(heap) heapq.heappush(q, end) while heap: start, end = heapq.heappop(heap) if q[0]
백준 1374번: 강의실 파이썬 코드(우선순위 큐) import heapq import sys n = int(sys.stdin.readline()) heap = [] q = [] count = 0 for _ in range(n): num, start, end = map(int,sys.stdin.readline().split()) heapq.heappush(heap, [start,end,num]) start, end, num = heapq.heappop(heap) heapq.heappush(q, end) while heap: start, end, num = heapq.heappop(heap) if q[0]
백준 1342번: 행운의 문자열 파이썬코드(백트래킹) s = input() s = list(s) su = len(s) count = 0 alphabet = [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0] for i in range(len(s)): alphabet[ord(str(s[i])) - 97] += 1 def backtracking(l, p): global count if l == 0: count += 1 for i in range(26): if alphabet[i] > 0 and i != p: alphabet[i] -= 1 backtracking(l-1, i) alphabet[i] += 1 else: pass backtracking(su, -1) print(count)
백준 1717번: 집합의 표현 파이썬 코드(유니온파인드, Union-find) import sys n, m = map(int, sys.stdin.readline().split()) parent = [i for i in range(n+1)] def find(x): if parent[x] == x: return x return find(parent[x]) def union(x, y): x = find(x) y = find(y) if x != y: if y > x: parent[y] = x else: parent[x] = y return def same(x, y): x = find(x) y = find(y) if x == y: print("YES") else: print("NO") return for i in range(m): a,b,c = map(int, sys.stdin.readli..
백준 4485번: 녹색 옷 입은 애가 젤다지? 파이썬 코드(다익스트라) import sys import heapq INF = sys.maxsize x = [0,0,-1,1] y = [-1,1,0,0] count = 0 while 1: n = int(sys.stdin.readline()) count += 1 visited = [[0 for _ in range(n)]for _ in range(n)] if n == 0: break graph = [] dist = [[INF for _ in range(n)] for _ in range(n)] for i in range(n): temp = list(map(int, sys.stdin.readline().split())) graph.append(temp) heap = [] heapq.heappush(heap, [graph[0][0],[0..
백준 1261번: 알고스팟 파이썬 코드(다익스트라) import sys import heapq INF = sys.maxsize x = [0,0,-1,1] y = [-1,1,0,0] n,m = map(int, sys.stdin.readline().split()) visited = [[0 for _ in range(n)]for _ in range(m)] graph = [] dist = [[INF for _ in range(n)] for _ in range(m)] for i in range(m): temp = list(input()) temp = [int(i) for i in temp] graph.append(temp) heap = [] heapq.heappush(heap, [graph[0][0],[0,0]]) while heap: cost, now = hea..
파이썬 탐욕(그리디) 알고리즘 사용하기 탐욕 알고리즘? 그리디 알고리즘? 탐욕 알고리즘은 이름하고 유사한 구조를 가진 알고리즘이다. 탐욕 알고리즘을 다른 말로 그리디 알고리즘 혹은 욕심쟁이 알고리즘이라고도 한다. 탐욕이라는 이름 그대로 지금 당장의 문제가 하나 주워졌을때, 나중은 고려하지 않고 지금의 가장 최적의 답을 도출하는 알고리즘이다. 한가지 상황을 예시로 들자면 사자성어 "조삼모사"가 떠오른다. 누군지는 기억안나는데 암튼 누군가가 원숭이들을 기르는데, 먹이가 부족해서 먹이를 줄여서 원숭이들에게 아침에 3개 저녁에 4개를 준다고 하자 원숭이들이 화를 냈다. 그러자 주인이 아침에 4개 저녁에 3개를 주겠다고 하니 원숭이들이 좋아한다는 그런 내용의 사자성어이다. 내용 그대로 당장 지금의 상황만 중요한 원숭이들이 그리디 알고리즘과 흡사하다. ..
파이썬 인접행렬과 인접리스트 사용하기 서론 요즘 소홀히 하던 알고리즘은 다시 좀 오랜만에 풀어보려한다. 알고리즘도 어찌보면 수학과 비슷한 점이 많다. 수학도 한 2주 정도만 안풀다풀면 뭔가 개념도 기억이 잘 안나고 막히는 게 좀 많다. 알고리즘도 오랜만에 풀면, 개념도 잊어먹고, 막히는게 많은 것이다. 그래서 나도 알고리즘을 소홀히 하지 않기 위해 노력중이다. 자주 풀진 않더라도 감을 잃지 않을 정도만 하려한다. 인접행렬, 인접리스트가 뭐야? 인접행렬과 인접리스트는 알고리즘에서 그래프를 표현하기 위한 방법이다. 인접행렬 인접행렬은 그래프를 표현할 수 있는 방법 중 가장 간단한 방법이다. 인접행렬은 이중리스트를 통해 표현한다. 만약 그래프의 노드의 수가 n개라고 치면 인접행렬의 크기는 n*n이 될 것이다. 그렇기에 그래프가 커지면 잡아먹는 공..

반응형