practivceAlgorithm/백준 379

[백준][Python] 13418 학교탐방가기

유니온 파인드. 정순, 역순으로 오르막길 포함된 갯수 파악해서 연산. import sys input = sys.stdin.readline def find(x): if parent[x] == x: return x parent[x] = find(parent[x]) return parent[x] def union(a,b): a = find(a) b = find(b) if level[a] >= level[b]: parent[b] = a if level[a]==level[b]: level[a] +=1 else: parent[a] = b N, M = map(int, input().split()) parent = {i:i for i in range(N+1)} level = {i:0 for i in range(N+1)..

[백준][Python] 14621 나만안되는 연애

그냥 성별조건 추가된 크루스칼 import sys input = sys.stdin.readline def find(x): if parent[x] == x: return x parent[x] = find(parent[x]) return parent[x] def union(a,b): a = find(a) b = find(b) if level[a] >= level[b]: parent[b] = a if level[a]==level[b]: level[a] +=1 else: parent[a] = b N, M = map(int, input().split()) sex = [0] + list(input().split()) arr = [] parent = {i:i for i in range(1,N+1)} level = {..

[백준][Python] 14923 미로탈출

경우의 수 따라 진입 하면 된다. 주의할 점은 for 문 순회기 때문에 key를 0으로 바꿔 넣으면 다시 1로 바꿔주어야 한다는 것. 분기 문제일때 변수를 직접 바꾸는 것은 주의하자. import sys input = sys.stdin.readline from collections import deque def bfs(): queue = deque() queue.append([s_x-1,s_y-1,0,1]) visited = [[[False for _ in range(M)] for _ in range(N)] for _ in range(2)] visited[1][s_x-1][s_y-1] = True while queue: x,y,time,key = queue.popleft() if x==t_x-1 and ..

[백준][Python] 13913 숨바꼭질4

경로에 대한 조사는 둘중하나다. 같이 들고 다니던가. 아니면 pre_node 배열을 만들던가. import sys input = sys.stdin.readline from collections import deque def bfs(start,target): queue = deque() queue.append([start,0,[start]]) visited = [False]*400001 visited[start] = True while queue: cur,cur_time,cur_path = queue.popleft() if cur==target: return cur_time ,cur_path for next_node in (cur-1,cur+1,cur*2): if 0

[백준][Python] 2581 소수

에라토스테네스의 seive 써서 구했다. 모든 숫자를 최댓 범위의 제곱근 범위까지 돌며 그 배수를 False로 바꿔주는게 포인트. i는 False로 바꾸지 않는다(소수이기 때문) i+i부터 바꾼다. import sys input = sys.stdin.readline def che(): nums = [True]*(N+1) nums[0]=nums[1]=False primes = [] for i in range(2,int(N**0.5)+1): if nums[i]: for j in range(i+i, N+1, i): nums[j] = False return [i for i in range(M,N+1) if nums[i]] M = int(input()) N = int(input()) arr = che() if a..

[백준][Python] 14696 딱지놀이

카드 숫자 센다음 큰 숫자부터 갯수 비교 import sys input = sys.stdin.readline N = int(input()) for _ in range(N): a_cnt = [0]*5 b_cnt = [0]*5 a_n, *a_card = map(int, input().split()) b_n, *b_card = map(int, input().split()) for card in a_card: a_cnt[card] += 1 for card in b_card: b_cnt[card] += 1 for i in range(1,5): if a_cnt[-i] > b_cnt[-i]: print('A') break elif a_cnt[-i] < b_cnt[-i]: print('B') break else: pr..