Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- database
- apitestcase
- to_attr
- racecondition
- aggregate
- dry-yasg
- DjangoCache
- Python
- Prefetch_related
- F객체
- Git
- Coroutine
- 코루틴
- DRF
- annotate
- docker
- 백준
- nestedfunction
- CD
- Continuous Delivery
- Transaction
- CI
- aws
- django
- EC2
- Continuous Deployment
- testcase
- QuerySet
- DjangoRestFramework
- 도커
Archives
- Today
- Total
BackEnd King KY
백준 1789 본문
728x90
✔️문제
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
✔️풀이
n = int(input())
i=1
while True:
if (i*(i+1))/2 == n:
print(i)
break
if (i*(i+1))/2 > n:
print(i-1)
break
i+=1
1부터 차례 대로 더해서 n이 되나 체크합니다.
만약 n=210이라면 (x * (x+1))/2=210이 되어야 하며, x=20입니다.
이럴 경우 가능한 자연수 개수의 최대값은 20이 됩니다.
만약 n=211이라면 x=20일 떄는 210이고 x=21이라면 231이 돼서 값을 넘깁니다
그러면 211은 어떻게 표현해야 될까요?
190 + 21 이렇게 나타내야 합니다. 19까지의 합이 190이고 거기서 21을 더 해줘야 하므로 n을 넘어 갈 경우 넘어간 n의 값에서 -1을 해주면 되는 것입니다.