alpyrithm_알파이리즘
[알고리즘][Python] 백준(BOJ) 1292 쉽게 푸는 문제_파이썬 본문
1292 쉽게 푸는 문제 https://www.acmicpc.net/problem/1292
문제 풀기 전 공부할 것 : 수학
풀이 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
반응형
'Algorithm > 백준 알고리즘_Python' 카테고리의 다른 글
[알고리즘][Python] 백준(BOJ) 1068 트리_파이썬 (0) | 2020.09.02 |
---|---|
[알고리즘][Python] 백준(BOJ) 1049 기타줄_파이썬 (0) | 2020.09.01 |
[알고리즘][Python] 백준(BOJ) 2217 로프_파이썬 (0) | 2020.08.30 |
[알고리즘][Python] 백준(BOJ) 4358 생태학_파이썬 (0) | 2020.08.29 |
[알고리즘][Python] 백준(BOJ) 14425 문자열 집합_파이썬 (0) | 2020.08.28 |
Comments