[백준] 1484번 다이어트

거북이·2023년 7월 12일
0

백준[골드5]

목록 보기
60/82
post-thumbnail

💡문제접근

  • 문제에서 구하고자하는 부분을 식으로 표현하면 다음과 같다.
    G = 성원이의 현재 몸무게의 제곱 - 성원이가 기억하는 몸무게의 제곱

  • 성원이의 현재 몸무게를 X, 성원이가 기억하는 몸무게를 Y라고 놓았을 때 곱셈공식에 의해 다음과 같은 수식이 나오게 된다.
    G = X^2 - Y^2

  • X와 Y를 투 포인터로 설정하고 점점 늘려가면서 확인하면 성원이의 현재 몸무게로 가능한 수치를 확인할 수 있다.

💡코드(메모리 : 38964KB, 시간 : 180ms)

import sys
input = sys.stdin.readline

G = int(input())

# G = (x+y)*(x-y)
x = [i for i in range(1, 100001)]
y = [j for j in range(1, 100001)]

X = 100000  # 현재 몸무게의 최댓값
Y = 100000  # 기억하고 있던 몸무게의 최댓값
res = []
left = 0
right = 0
while left < X and right < Y:
    if (x[left] + y[right]) * (x[left] - y[right]) == G:
        res.append(x[left])

    if (x[left] + y[right]) * (x[left] - y[right]) < G:
        left += 1
        continue
    right += 1

if len(res) == 0:
    print(-1)
else:
    res.sort()
    for i in res:
        print(i)

💡소요시간 : 37m

0개의 댓글