Notice

[Python] 백준 1292번 쉽게 푸는 문제

문제

동호는 내년에 초등학교를 입학한다. 그래서 동호 어머니는 수학 선행 학습을 위해 쉽게 푸는 문제를 동호에게 주었다.

이 문제는 다음과 같다. 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까지 수를 더한다.

 

글쓰기 설정