반응형
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
딱 보자마자 1부터 시작하는 등차수열을 하여 마지막 값을 비교하여 되겠구나라고 생각했다.
우선 등차수열 공식은
$$ S = \frac{n(n+1)}{2} $$
처음에는
(오답 코드)
s = int(input())
a = 1
while True:
result = (a*(a+1))/2
if result >= s:
print(a-1)
break
a += 1
위와 같이 작성했다.
하지만 돌려본 후 틀렸습니다. 를 확인하고 다시 보니 s = 3 일 때 무작정 a-1을 해서 1이 나온 것이다.
3 = 1 + 2로 2가 나와야 한다.
그래서 조건을 수정했다.
s = int(input())
a = 1
result = 0
while True:
result = (a*(a+1))/2
if result >= s:
break
a += 1
if result == s:
print(a)
elif result - a < s:
print(a-1)
else:
print(a)
위 코드는 정말 무식하게 다시 나눈 방법이고
다시 생각해서 코드를 작성하였다.
(찐 정답 코드)
s = int(input())
n = 1
while n * (n + 1) / 2 <= s:
n += 1
print(n - 1)
while True가 아닌 while에 규칙을 주었고
마지막에 나온 수에서 n-1을 하는 방식으로 바꾸었다.
이후 다른 정답자의 코드를 보고 어이가 없었다.
print(int(((int(input())*8+1)**.5-1)/2))
이 한 줄이 정답이다.
어떤 방식으로 저런 수식을 도출해냈는지.. 나는 모르겠다.
반응형
'Algorithm > 백준' 카테고리의 다른 글
[Python] 백준 3009번 - 네 번째 점 (0) | 2022.08.12 |
---|---|
[Python] 백준 1934번 - 최소공배수 (최소공배수, 최대공약수, 유클리드호제법) (0) | 2022.08.11 |
[Python] 백준 11653번 - 소인수분해 (0) | 2022.08.10 |
[백준] 2525번 오븐 시계 / 2530번 인공지능 시계 (0) | 2022.08.08 |
[백준] 11021번 A+B -7 (0) | 2022.08.05 |
댓글