[백준/파이썬] 1292번 쉽게 푸는 문제 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1292번 쉽게 푸는 문제
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
수열 1, 2, 2, 3, 3, 3, ...에서
구간 [A, B]의 합을 구하는 문제입니다.
코드
import math
a,b=map(int, input().split())
x=math.ceil(((1+8*a)**.5-1)/2)
y=math.ceil(((1+8*b)**.5-1)/2)
if x==y:print((b-a+1)*x)
else:
s=x*(x*(x+1)//2-a+1)
for i in range(x+1,y): s+=i*i
s+=y*(b-y*(y-1)//2)
print(s)
설명
삼각수로 인덱스가 어느 숫자 구간에 속하는지 찾습니다.
x: 시작 인덱스A가 속한 값y: 끝 인덱스B가 속한 값
x == y면 같은 블록 안이므로 바로 계산하고,
다르면 시작 블록 일부 + 중간 전체 블록 + 끝 블록 일부를 더해 합을 구합니다.
댓글남기기