코드 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])
코드 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 tc = int(input()) for i in range(tc): n = int(input()) k = int(input()) parent = [i for i in range(n+1)] for _ in range(k): a,b = map(int, input().split()) unio..
코드1 (dfs) n,m,k = map(int, input().split()) money = [0,*map(int, input().split())] graph = [[] for _ in range(n+1)] visited = [0]*(n+1) for _ in range(m): x,y = map(int, input().split()) graph[x].append(y) graph[y].append(x) moneylist = [] def dfs(a, graph, visited): stack = [a] visited[a] = 1 cost = money[a] while stack: pn = stack.pop() for i in graph[pn]: if not visited[i]: visited[i] = 1 cos..
코드 # 유향 비순환 그래프, 길 정렬 -> 위상정렬 사용 # 갈 수 있는 곳의 비용을 하나 하나 다 따져주어야 한다 # 때문에 진입차수가 0이 아니더라도 비용 최신화 from collections import deque import sys input = sys.stdin.readline def topol_sort(): queue = deque([1]) # 1부터 시작 while queue: pn = queue.popleft() for i in graph[pn]: indegree[i[0]] -= 1 # 진입차수 -1 cost = visited[pn]+i[1] if cost > visited[i[0]]: visited[i[0]] = cost chase[i[0]] = pn # 가장 높은 값으로 초기화될 때 ..

코드 # 사이클 판별 # 무방향 그래프인 경우 유니온 파인드로 사이클을 판별할 수 있다 # 참고로 유향 그래프인 경우에는 dfs로 판별할 수 있다 import sys sys.setrecursionlimit(10**5) # 재귀 깊이 제한 input = sys.stdin.readline # 빠른 입력 n,m = map(int, input().split()) parent = [i for i in range(n)] # 집합 def find(x,lst): # 트리의 루트 노드를 찾아주는 find 함수 if x != lst[x]: lst[x] = find(lst[x], lst) return lst[x] def union(x,y,lst): # 트리를 합쳐주는 union 함수 x = find(x,lst) y = fi..
코드 # 가중치 없는 최단거리 -> bfs import sys from collections import deque input = sys.stdin.readline n, m = map(int, input().split()) dx, dy = (1,-1,0,0), (0,0,1,-1) # 상하좌우 이동 graph = [[*map(int, input().split())] for _ in range(n)] visited = [[0]*m for _ in range(n)] # 방문기록 def bfs(i,j): queue = deque([(i,j)]) while queue: px,py = queue.popleft() for i in range(4): nx = px + dx[i] ny = py + dy[i] if 0
코드 import sys input = sys.stdin.readline n,m = map(int, input().split()) sequence = [] # 메달 수 기록 for _ in range(n): sequence.append([*map(int, input().split())]) sequence.sort(key = lambda x: (-x[1], -x[2], -x[3])) # 내림차순 정렬 idx = 0 # 인덱스를 기록할 변수 for i in range(n): if sequence[i][0] == m: # m이 나오는 인덱스 기록 idx = i break for i in range(n): # 공동 i등이 나올 수 있는 것을 찾기 위해 필요한 과정. # i가 아래부터 올라가므로 공동 기록 포함해..