본문 바로가기
반응형

전체 글252

[백준][Python] 9489번 사촌 9489번: 사촌 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 노드의 수 n과 사촌의 수를 구해야 하는 노드의 번호 k가 주어진다. (1 ≤ n ≤ 1,000, 1 ≤ k ≤ 1,000,000) 다음 줄 www.acmicpc.net 코드 import sys while 1: n,k = map(int,sys.stdin.readline().split()) if n == 0 and k == 0: break else: dic = {} n_list = list(map(int,sys.stdin.readline().split())) cnt = 0 parent = [] if len(n_list) > 1: next = n_list[1] parent.append(next) for i i.. 2022. 3. 10.
[백준][Python] 3584번 가장 가까운 공통 조상 3584번: 가장 가까운 공통 조상 루트가 있는 트리(rooted tree)가 주어지고, 그 트리 상의 두 정점이 주어질 때 그들의 가장 가까운 공통 조상(Nearest Common Anscestor)은 다음과 같이 정의됩니다. 두 노드의 가장 가까운 공통 조상은, 두 www.acmicpc.net 코드 import sys def parent(a): p = [] p.append(a) # 자기 자신도 조상으로 포함 for _ in range(N): if tree[a] == []: break else: p.append(tree[a]) a = tree[a] return p T = int(input()) for _ in range(T): N = int(input()) tree = [[] for _ in range.. 2022. 3. 8.
[백준][Python] 15900번 나무 탈출 15900번: 나무 탈출 평소에 사이가 좋지 않던 성원이와 형석이가 드디어 제대로 한 판 붙으려고 한다. 성원이와 형석이 둘과 모두 똑같이 친한 인섭이가 대결 종목을 정해 가져왔다. 바로 '나무 탈출' 이라는 보드게 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**5) N = int(input()) tree = [[] for _ in range(N+1)] depth = [0 for _ in range(N+1)] visit = [0 for _ in range(N+1)] ans = 0 for _ in range(N-1): a,b = map(int,sys.stdin.readline().split()) tree[a].append(b) tree[b].append.. 2022. 3. 7.
[백준][Python] 20364번 부동산 다툼 20364번: 부동산 다툼 첫 번째 줄에 땅 개수 N과 꽉꽉나라에 사는 오리 수 Q가 공백으로 구분되어 주어진다. (2 ≤ N 0: if b in vis: ans = b b//=2 if ans == 0: vis.add(a) print(ans) for i in num: visit(i) 설명 처음에 vis를 리스트로 했더니 시간초과가 떠서 set으로 바꿔주었다. 자식노드의 번호는 이미 정해져있기 때문에 오리가 원하는 땅을 기준으로 위로 거슬러 올라갔다. 올라갈 때 부모 노드는 2로 나눈 값이기 때문이다. 거슬러 올라가기 때문에 처음 마주치는 점유된 땅은 코드 상으로는 가장 마지막에 만나는 값이다. 따라서 점유된 땅 번호를 계속 갱신시켜줘야 한다. 만약 num=0일 때, 즉 원하는 땅을 가질 수 있을 때는 v.. 2022. 3. 4.
[백준][Python] 14675번 단절점과 단절선 14675번: 단절점과 단절선 프로그램의 입력은 표준 입력으로 받는다. 입력의 첫 줄에는 트리의 정점 개수 N이 주어진다. (2 ≤ N ≤ 100,000) 트리의 정점은 1번부터 n번까지 존재한다. 다음 줄부터 N-1개의 줄에 걸쳐 간선의 정 www.acmicpc.net 코드 import sys n = int(input()) tree = [[] for _ in range(n+1)] for _ in range(n-1): a,b = map(int,sys.stdin.readline().split()) tree[a].append(b) tree[b].append(a) q = int(input()) for _ in range(q): t,k = map(int,sys.stdin.readline().split()) if.. 2022. 3. 3.
[백준][Python] 2581번 소수 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 코드 a = int(input()) b = int(input()) n_list = [] for i in range(a,b+1): if i == 2: n_list.append(i) else: for j in range(2,i): if i%j == 0: break elif j == i-1: n_list.append(i) sum = 0 if n_list: for i in n_list: sum += i print(sum) print(n_list[0]) else: print(-1) 2022. 3. 3.
[백준][Python] 5639번 이진 검색 트리 5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10**6) num_list = [] while True: try: num = int(input()) num_list.append(num) except: break def postorder(first,end): if first > end: return mid = end+1 # 루트보다 큰 값이 존재하지 않을 경우를 대비 for i in range(first+1,end+1): if num.. 2022. 3. 1.
[백준][Python 파이썬] 1068번 트리 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 코드 import sys n = int(input()) tree = [[] for _ in range(n)] p = list(map(int,sys.stdin.readline().split())) for i in range(n): tree[i] = p[i] remove = int(input()) def delete(remove): tree[remove] = -2 for i in range(n): if tree[i] == remove: tree[i] = -2 .. 2022. 2. 28.
[백준][Python] 9934번 완전 이진 트리 9934번: 완전 이진 트리 상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래 www.acmicpc.net 코드 import sys k = int(input()) num = list(map(int,sys.stdin.readline().split())) length = len(num) tree = [[] for _ in range(k)] def get_num(first,last,k): if first == last: tree[k].append(num[first]) return mid = (first+last) // 2 tree[k].append.. 2022. 2. 28.
반응형