# 답 import sys input = sys.stdin.readline N, M = map(int, input().split()) arr = [0] + list(map(int, input().split())) for i, v in enumerate(arr): if i != 0: arr[i] += arr[i - 1] for _ in range(M): i, j = map(int, input().split()) print(arr[j] - arr[i - 1]) # 원리 i번째부터 j번째까지의 구간 합을 빠르게 구하는 방법은 1) 주어진 배열을 처음부터 누적합 형태로 바꿔놓고, 2) arr[j] - arr[i - 1]하면 됩니다. 예를 들어, 다음과 같은 배열 arr1이 있다고 가정해봅시다. arr1 = [1..
전체 글
# 답 import math N = int(input()) arr = [] G = 0 for i in range(N): arr.append(int(input())) if i == 1: G = abs(arr[1] - arr[0]) G = math.gcd(G, abs(arr[i] - arr[i - 1])) # G의 약수 구하기 ans = set([G]) for i in range(2, int(G ** 0.5) + 1): if G % i == 0: ans.add(i) ans.add(G // i) print(*sorted(list(ans))) # 원리 나누었을 때 나머지(R)를 모두 같게 만들어주는 숫자 M이 있다고 가정해봅시다. 그렇다면 각 숫자들(N)은 아래와 같이 표현할 수 있을 것입니다. N[0] = X..
# 답 math 라이브러리를 사용하지 않은 풀이 a, b = map(int, input().split()) def gcd(a, b): while b > 0: a, b = b, a % b return a def lcm(a, b): return a * b // gcd(a, b) print(gcd(a, b)) print(lcm(a, b)) math 라이브러리를 사용한 풀이 import math a, b = map(int, input().split()) print(math.gcd(a, b)) print(math.lcm(a, b)) # 유클리드 호제법 2개의 자연수 a, b에 대하여, a를 b로 나눈 나머지를 r이라 하면(단, a > b), a와 b의 최대공약수는 b와 r의 최대공약수와 같습니다. 이 성질에 따라..
# 답 Counter 라이브러리를 사용하지 않은 풀이 import sys input = sys.stdin.readline N = int(input()) arr = [int(input()) for _ in range(N)] arr.sort() d = dict() for item in arr: if item in d: d[item] += 1 else: d[item] = 1 m = 0 tmp = list() for k, v in list(d.items()): if v > m: tmp = [k] m = v elif v == m: tmp.append(k) tmp.sort() # 산술평균 print(round(sum(arr) / N)) # 중앙값 print(arr[N // 2]) # 최빈값 if len(tmp) =..