백준 1484번: 다이어트

Y·2023년 12월 3일
0

백준

목록 보기
20/27

백준 1484번: 다이어트

G=int(input())
#G=cur**2 - past**2
res = []
past, cur = 1,2
while past<cur and cur+past<=G:
    tmp = cur**2-past**2
    if tmp==G:
        res.append(cur)
        past+=1
        cur+=1
    elif tmp<G:
        cur+=1
    else:
        past+=1
if res:
    for i in res:
        print(i)
else:
    print(-1)

투포인터로 바로 풀 수 있는 문제다. 다만 종료 조건을 어떻게 해야할지를 고민했는데, G=cur^2-past^2=(cur-past)*(cur+past)이며, cur,past는 모두 자연수이고 cur>past가 자명하므로 (G>=1이기 때문에) G=n*m(m>n)이라고 할때 n보다 큰 m값은 항상 cur+past가 된다. G를 자연수의 곱셈으로 나타날때 가장 큰/작은 숫자가 나오는 경우의 수는 1*G의 경우의 수이므로, cur+past<=G여야한다. 그래서 이걸 종료조건으로 잡고 코드를 작성해줬다. 그런데 8퍼센트쯤에서 자꾸 틀려서 뭐가 문제인가 했더니 답이 없을때 -1 출력해줘야하는걸 놓침..ㅎㅎ.. 문제를 꼼꼼히 읽자..

profile
개발자, 학생

0개의 댓글