알고리즘 문제풀이/Python3

DataFrame은 pandas라는 데이터 분석 모듈 안에 들어있는 데이터 출력 함수다. dataFrame 안에 들어가는 데이터 자료형은 딕셔너리이다. from pandas import DataFrame data = {'col0':[1,2,3,4],'col1':[10,20,30,40],'col2':[100,200,300,400]} df = DataFrame(data) print(df) 위의 코드를 출력하면 이런식으로 나오는 게 dataFrame이다. 여기서 각 컬럼은 pandas의 Series의 형태로 들어가 있다. print(df['col0']) print(df['col0'][0]) 이런식으로 컬럼을 꺼내보면 Series 가 나오고 그 시리즈의 인덱스를 통하여 값 하나하나를 받을 수 있다. data =..
1. DFS(Depth First Search) - 스택 또는 재귀를 사용해서 구현 위의 트리를 인접행렬로 나타내는 코드 adj = [[0] * 13 for i in range(13)] adj[0][1] = adj[0][7] = 1 adj[1][2] = adj[1][5] = 1 adj[2][3] = adj[2][4] = 1 adj[5][6] = 1 adj[7][8] = adj[7][9] = 1 adj[9][10] = adj[9][11] = adj[9][12] = 1 for row in adj: print(row) 13*13 행렬을 만들었다. 이를 토대로 dfs를 짜면 def dfs(now): for nxt in range(13): if adj[now][nxt]: print(now, '->', nxt, '..
1. 그래프 각 점을 Vertex 또는 node라고 부르고 점들을 연결하는 간선을 edge라고 부르는 구조이다. 방향성으로 분류하면 무방향(양방향) 그래프와 방향 그래프로 분류 할 수 있다. 한 곳이라도 순환하는 지점이 있으면 순환 그래프, 없으면 비순환 그래프이다. DAG(Directed Acyclic Graph)라는 것도 있는데 순환하지 않으면서 방향성이 정해져있는 그래프이다. 2. 트리 (순환성이 없는 무방향 그래프 어떤 노드도 루트 노드가 될 수 있다. (어디서 시작을 하든 다른 모든 노드로 갈 수 있음.) 가장 바깥쪽 노드는 리프 노드. A 노드에서 B 노드로 가는 경로가 반드시 존재하며 유일하다. 노드 개수 = 간선 개수 + 1) 위의 설명은 수학적인 개념이고 코딩쪽에서는 보통 부모 자식 관계..
https://www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net #물이 새는 곳 개수 N, 테이프의 길이 L N, L = map(int, input().split()) #0~1000까지 이므로 1001개 좌표 False설정 coordi = [False] * 1001 #물이 새는 곳의 좌표 입력받기 for i in map(int, input().split()): coordi[i] = True #확인할 좌표 포인터 x, 필요한 테이프 개수 cnt ..
11047번: 동전 0 (acmicpc.net) 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 조건에 보면 동전의 가치는 배수 관계라고 되어있다. 배수 관계이면 그리디 알고리즘으로 풀 수 있다. # 한 줄에 입력 여러개 받아서 변수에 할당하기 N, K = map(int, input().split()) coins = [int(input()) for i in range(N)] coins.reverse() totalCoins = 0 for coin i..
9명의 난쟁이 중에서 7명을 뽑아야 하니까 조합을 사용해야 한다. 조합은 combianations 모듈을 가져다 쓰면 된다. from itertools import combinations heights = [int(input()) for i in range(9)] for candis in combinations(heights, 7): if sum(candis) == 100: for real_dwarfs in sorted(candis): print(real_dwarfs) break 9개의 입력을 받아서 heights에 넣은 다음 heights 리스트에서 7개를 선택해서 candis에 넣는다. candis의 합이 100일 때만 리스트의 각각의 원소를 출력해주면 되는데, 오름차순으로 출력하라고 했으니 cand..
책 이름 : 팔린 권수 => key : value 로 매칭할 수 있기 때문에 딕셔너리 구조를 이용한다. d = dict() for i in range(int(input())): book = input() if book in d: d[book] += 1 else: d[book] = 1 # print(d.keys()) # print(d.values()) # print(d.items()) m = max(d.values()) candi = [] for k, v in d.items(): if v == m: candi.append(k) candi.sort() print(candi[0]) 딕셔너리 구조는 .keys()를 통해 키만 뽑아낼 수 있고 .values()를 통해 values만 뽑아낼 수도 있고 .items(..
일단 파이썬의 heapq 모듈은 min-heap이기 때문에 루트노드에 최소값이 위치하게 된다. **튜플 정렬을 이용. 예를 들어 arr = [(3, 4), (3, 1), (8, 5), (3, 2), (8, 7)] 이 있으면 arr.sort() 했을 때 튜플들의 0번째 기준으로 오름차순으로 먼저 정렬한 다음 1번째 인덱스 기준으로 정렬한 다음 보여준다. print(arr) >>> [(3, 1), (3, 2), (3, 4), (8, 5), (8, 7)] 이다. (적용과 해결) import heapq as hq, sys N = int(sys.stdin.readline()) pq = [] for i in range(N): x = int(sys.stdin.readline()) if x: hq.heappush(pq..
Purewater
'알고리즘 문제풀이/Python3' 카테고리의 글 목록