촉촉한초코칩
[백준] 1789(수들의 합) Python 본문
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
문제점. N이 연속된 수가 아니라면 자연수의 합인 S을 어떻게 찾을 것인지?
GPT한테 물어보니까 작은수부터 더해서 S를 찾으라고 함..

200이 없는.. 불상사가 발생함
입력받은 수부터 값을 빼기로 함
반대로 해도 마찬가지..
그러면 연속된 수가 아닐 수도 있으니까, 일단 더하다가 a를 넘어서면 딱 a만큼까지만 더하고 그 수를 최대수로 지정한다.
이렇게 마지막에 더한 수가 최대값이 아닐 수 있기 때문에 마지막에 더한 값과 마지막 전에 더한 값을 비교해서 가장 큰 수를 최대값으로 지정했다.
a = int(input()) #2
sum = 0
if a==1:
print(1)
for i in range(1, a):
sum+=i #3
print('sum:',sum,'i:',i)
if sum>a:
tmp = sum-i #210-20=190으로 돌려놓기
ttmp = a-tmp #S까지 몇 더하면 되는지
i-=1
if ttmp>i:
print(ttmp)
else:
print(i)
break
if sum==a:
print(i)
break
계속 틀렸다고뜸
뭔가 반례가 있나 봄
왜 안되나 했는데..출력초과라고 떠서 검색해보니
마지막 한줄이 더 출력되어서 그렇대.. 근데 이전에도 자동 줄바꿈때문에 한줄 더 출력된적 많았는데..? ...
아 그리고 2도 1로 출력되도록 처리해주어야 한다.
a = int(input())
sum = 0
if a==1 or a==2:
print(1,end='')
for i in range(1, a):
sum+=i #3
if sum>a:
tmp = sum-i #더하기 전으로 돌려놓기
ttmp = a-tmp #S까지 몇 더하면 되는지
i-=1
if ttmp>i:
print(ttmp, end='')
else:
print(i, end='')
break
if sum==a:
print(i, end='')
break
'Algorithm' 카테고리의 다른 글
[백준] 10156(과자) Python (0) | 2025.06.04 |
---|---|
[백준] 2530(인공지능 시계) Python (0) | 2025.06.04 |
[백준] 2163(초콜릿 자르기) Python (0) | 2025.06.03 |
[백준] 24262(알고리즘 수업 - 알고리즘의 수행 시간 1) C, Python (0) | 2025.05.09 |
[백준] 14215(세 막대) Python, C (0) | 2025.03.09 |