파이썬

· 백준
코드1 (등차수열 합공식 사용) n = int(input()) cnt = 1 while 1: if 1 + 3*(cnt-1)*cnt>=n: # 등차수열의 합공식 사용 break cnt += 1 print(cnt) 등차수열의 합공식을 이용해서 그 개수보다 아래면 cnt를 출력해주는 방식으로 했다. 그런데 이보다 더 직관적으로 만들어보면 아래와 같다 코드2 (6의 배수 더해주기) n = int(input()) house = 1 # 벌집의 개수 cnt = 1 # 반복되는 횟수 while house < n: # n보다 벌집의 개수가 작을 때까지 반복 house += 6*cnt # 6의 배수를 곱해준다. cnt += 1 print(cnt) 우선 문제를 쉽게 이해하기 위해 시각화하고, 해결할 때 복잡하게 생각하지 않..
· 백준
코드 # 버블정렬 사용 tc = int(input()) for i in range(tc): num = [*map(int, input().split())][1:] cnt = 0 for j in range(len(num)): for k in range(j+1, len(num)): if num[j] > num[k]: num[j], num[k] = num[k], num[j] cnt += 1 print(i+1, cnt)
· 백준
코드 # 크루스칼 알고리즘 이용 import sys input = sys.stdin.readline def find(a,lst): if a != lst[a]: lst[a] = find(lst[a], lst) return lst[a] def union(a,b,lst): a = find(a,lst) b = find(b,lst) if a < b: lst[b] = a else: lst[a] = b n, m = map(int, input().split()) parent = [i for i in range(n+1)] edge = [] for _ in range(m): a,b,c = map(int, input().split()) edge.append((c,a,b)) edge.sort(key=lambda x: x[0]..
· 백준
코드 # 모든 대학교로 이동 가능해야한다 -> 신장 트리 # 최소 비용 -> 최소 신장 트리 # 크루스칼 알고리즘 이용 import sys input = sys.stdin.readline def find(a, lst): if a != lst[a]: lst[a] = find(lst[a],lst) return lst[a] def union(a,b,lst): a = find(a, lst) b = find(b, lst) if a < b: lst[b] = a else: lst[a] = b n, m = map(int, input().split()) school = ['x', *input().rstrip().split()] # 인덱싱을 쉽게 하기 위해 'x'추가 parent = [i for i in range(n+1..
· 백준
코드 # 크루스칼 알고리즘 import sys input = sys.stdin.readline def find(x, lst): if x != lst[x]: lst[x] = find(lst[x], lst) return lst[x] def union(a,b,lst): a = find(a, lst) b = find(b, lst) if a < b: lst[b] = a else: lst[a] = b n,m = map(int, input().split()) parent = [i for i in range(n+1)] edge = [] for _ in range(m): a,b,c = map(int, input().split()) edge.append((c,a,b)) edge.sort(key=lambda x: x[0])..
· 백준
코드 import sys from collections import deque input = sys.stdin.readline tc = int(input()) def bfs(): total = 0 queue = deque([1]) while queue: now = queue.popleft() for i in graph[now]: if not visited[i]: visited[i] = 1 total += 1 queue.append(i) return total - 1 for _ in range(tc): n,m = map(int, input().split()) graph = [[] for _ in range(n+1)] visited = [0]*(n+1) for _ in range(m): x,y = map(i..
· 백준
코드 min, max = map(int, input().split()) minsq = 2 # 1보다 큰 제곱수여야 하므로 시작은 2 maxsq = int(max**0.5) # 마지막 제곱해줄 수 numset = set() # 중복 제거를 위해 집합 자료형 이용 while minsq
· 백준
코드 def gcd(a,b): # 유클리드 호제법 while b: a, b = b, a%b return a n,m = map(int, input().split()) k = gcd(n,m) print(k*'1') # 최대공약수만큼 1의 개수를 출력해주면 된다
· 백준
코드 # 최단거리 X, 연결되어있는지 확인 # 집합에 속해 있는지 확인하는 과정 # 유니온-파인드 이용 import sys sys.setrecursionlimit(10**5) input = sys.stdin.readline n = int(input()) m = int(input()) node = [i for i in range(n+1)] # 부모 노드 def find(a, parent): if a != parent[a]: # 루트 노드가 아니면 parent[a] = find(parent[a], parent) # 루트 노드 찾기 return parent[a] def union(a,b,parent): a = find(a, parent) b = find(b, parent) if a < b: # 루트 노드가 작..
· 백준
코드1 import sys sys.setrecursionlimit(10**5) input = sys.stdin.readline n = int(input()) node = [i for i in range(n+1)] def find(a, parent): if a != parent[a]: # 루트 노드가 아니라면 parent[a] = find(parent[a], parent) # 루트 노드를 찾을 때까지 순회 return parent[a] # 루트 노드 반환 def union(a,b,parent): a = find(a, parent) b = find(b, parent) if a < b: # 루트 노드가 작은 값에 큰 값을 붙인다 parent[b] = a else: parent[a] = b for _ in ra..