코드 # 뒤에서부터 줄여준다. n = int(input()) lst = [int(input()) for _ in range(n)] res = 0 for i in range(n-1,0,-1): # 범위에 주의, 두 번째 인자에-1을 하면 lst[0]
전체 글
Hello World코드 # 주의해야할 점 # parent 배열은 루트 노드임을 항상 보장해주지는 않는다. import sys, math sys.setrecursionlimit(10**5) 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
코드 def distance(x1, y1, x2, y2): dist = ((x2-x1)**2 + (y2-y1)**2)**0.5 return dist 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 import sys sys.setrecursionlimit(10**5) input = sys.stdin.readline n,m = map(int, input().split()) parent = [i for i in range(n+1)] graph = [0] for _ in..
코드 # 최소 스패닝 트리 문제 # 거리 공식으로 가중치 구해주기 # 거리 구하고 i,j점 과 함께 리스트에 추가 # 크루스칼 알고리즘 사용 def distance(x1,y1,x2,y2): dist = ((x2-x1)**2+(y2-y1)**2)**0.5 return dist 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 import sys sys.setrecursionlimit(10**5) input = sys.stdin.readline n = int(input..
코드 # 최소 스패닝 트리, 크루스칼 알고리즘 이용 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 import sys sys.setrecursionlimit(10**5) input = sys.stdin.readline n = int(input()) parent = [i for i in range(n+1)] graph = [[*map(int, input().split())] for _ in range(n)] edge = [] for i in range(n)..
코드 # 두 수의 합을 구하는 것 # 두 포인터를 이용하면 쉽게 해결 가능 # 두포인터를 이용하기 위해서는 리스트를 정렬해야함에 주의 n = int(input()) lst = [*map(int, input().split())] x = int(input()) lst.sort() # 두 포인터를 사용하기 위해서 정렬 s,e = 0, n-1 res = 0 while sx: # 큰 값을 줄여서 값을 맞춰주어야 한다 e -= 1 elif lst[s]+lst[e]
코드 from math import gcd n = int(input()) num = [int(input()) for _ in range(n)] rksrur = [] for i in range(n-1): rksrur.append(num[i+1]-num[i]) maxrksrur = gcd(*rksrur) cnt = 0 for i in rksrur: cnt += i//maxrksrur-1 print(cnt) 가로수의 간격 // 최대공약수를 해서 구하는 방법이 아니면 메모리 초과나 시간 초과의 벽에 부딪히게 된다. 나누는 방법을 이용하면 O(N)의 복잡도로 해결할 수 있다.
코드 # 1은 앞에서부터, 0은 뒤에서부터 제거한다 li = list(input()) zero, one = li.count('0')//2, li.count('1')//2 for _ in range(zero): li.pop(-li[::-1].index('0')-1) for _ in range(one): li.pop(li.index('1')) print(''.join(li)) 순서를 지켜야한다는 조건이 있어서 리스트를 뒤집어 가며 빼주면 된다. 만약 "0"*(기존 0의 개수의 절반) + "1"(기존 1의 개수의 절반)을 하면 25점이 나온다.
코드 # 유니온 파인드 이용 def find(a, lst): if a != lst[a]: find(lst[a], lst) return lst[a] def union(a,b,lst): a = find(a,lst) b = find(b,lst) import sys sys.setrecursionlimit(10**5) 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 airport = int(input()) gate = [i ..
코드 import sys input = sys.stdin.readline # 빠른 입출력 div = {"Y":1, "F":2, "O":3} n, game = input().rstrip().split() people = set() for _ in range(int(n)): human = input().rstrip() people.add(human) print(len(people)//div[game])