문제
동호는 내년에 초등학교를 입학한다. 그래서 동호 어머니는 수학 선행 학습을 위해 쉽게 푸는 문제를 동호에게 주었다.
이 문제는 다음과 같다. 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5 .. 이러한 수열을 만들고 어느 일정한 구간을 주면 그 구간의 합을 구하는 것이다.
하지만 동호는 현재 더 어려운 문제를 푸느라 바쁘기에 우리가 동호를 도와주자.
입력
첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.
출력
첫 줄에 구간에 속하는 숫자의 합을 출력한다.
예제 입력 1
3 7
예제 출력 1
15
풀이
a, b = map(int, input().split())
num = []
for i in range(1, b + 1): # 숫자 i만큼 i를 리스트에 추가
for j in range(i):
num.append(str(i))
sum = 0
for i in range(a - 1, b): # 첫번째 인덱스가 1이어야하므로 (a-1) ~ b 까지의 수를 더한다
sum += int(num[i])
print(sum)
숫자를 str로 변환하지 않고 정수형으로 풀이
- 기존에 ` str(i) ` * `i` = `i i ` 인걸 생각하고 풀었더니, for문으로 만들었음에도 str을 추가해버렸다.
num = []
for i in range(1, b + 1):
for j in range(i):
num.append(i)
print(sum(num[a-1:b]))
다른 풀이 이해
a,b = map(int,input().split())
arr = [0]
for i in range(46):
for j in range(i):
arr.append(i)
print(sum(arr[a:b+1]))
a, b의 범위가 1000까지이므로, 반복문의 범위는 46까지 구해도 된다.
i 만큼 숫자 i를 추가하고 a ~ b까지 수를 더한다.
'알고리즘' 카테고리의 다른 글
| [Python] 백준 14888번 연산자 끼워넣기 (0) | 2022.12.01 |
|---|---|
| [Python] 백준 2581번 소수 (0) | 2022.11.30 |
| [Python] 백준 1978번 소수 찾기 (0) | 2022.11.30 |
| [Python] 프로그래머스 위장 (0) | 2022.11.27 |
| [Python] 프로그래머스 전화번호 목록 (0) | 2022.11.27 |