alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 1292 쉽게 푸는 문제_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 1292 쉽게 푸는 문제_파이썬

알파이 2020. 8. 31. 08:54

 

1292 쉽게 푸는 문제    https://www.acmicpc.net/problem/1292

 

1292번: 쉽게 푸는 문제

첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1≤A≤B≤1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.

www.acmicpc.net

 

 

 

 

 

문제 풀기 전 공부할 것 : 수학

 

 

 

 

 

 

 

 

풀이 1

<내용>

  • section에 1을 한 번, 2를 두 번, 3을 세 번, ... 의 수를 누적하여 누적이 1000을 넘을 때까지 저장한다.
  • a, b 구간을 for문을 돌면서 누적된 값보다 작아지면 그 인덱스를 더한다.

 

 

<코드>

a, b = map(int, input().split())
section = [0, 1]
i = 1
while section[-1] < 1000:
    i += 1
    section.append(section[-1]+i)

res = 0
for i in range(a, b+1):
    for j in range(len(section)):
        if i <= section[j]:
            res += j
            break
print(res)

 

 

 

 

 

 

풀이 2

<내용>

  • 위의 방식과 같지만 누적되는 리스트를 따로 만들지 않고 변수 선언하여 해결한다.

 

<코드>

a, b = map(int, input().split())

res, curr, cnt = 0, 1, 1

for i in range(1, b+1):
    if i >= a:
        res += curr
    if cnt >= curr:
        cnt = 0
        curr += 1
    cnt += 1
    
print(res)

 

 

 

 

 

 

 

풀이 3

<내용>

  • a, b의 범우가 1 이상 1,000 이하이므로 section에 1 2 2 3 3 3 ... 이런 규칙을 갖도록 배열의 크기가 1000 이상이 되는 sectioin을 만든다.
  • a, b의 구간의 합을 구한다.

 

 

<코드>

a, b = map(int, input().split())
section = [[i]*i for i in range(1, 46)]
section = [0] + sum(section, [])
print(sum(section[a:b+1]))

 

 

 

 

 

 

 

 

 

 

복습

sum(list, [ ]) : list 내부의 원소들을 [ ]에 대해 더하는 것

  • 예 : sum([[1, 2], [3, 4], [5, 6]], [ ])
  • return : [1, 2, 3, 4, 5, 6]
  • sum(iterable, start) 이므로 [[1, 2], [3, 4], [5, 6]]가 iterable이고 [ ]가 start이다.
  • [ ](리스트)에 [1, 2]를 더하고 [3, 4]를 더하고 [5, 6]을 더하는 것이므로 리스트를 extend 하는 것

 

 

 

728x90
반응형
Comments