728x90

http://www.acmicpc.net/problem/1484

 

1484번: 다이어트

성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다.

www.acmicpc.net

 

 

# 조건

  • 다이어트 중인 성원이가 저울을 부셨다.
  • 새로운 저울위에 올라간 성원이가 안돼!!!!! G킬로그램이나 더 쪘다고 말을 했을 때,
  • 여기서 G킬로그램은 성원이 현재 몸무게의 제곱에서 성원이가 기억하고 있던 몸무게의 제곱을 뺀 것 이다.
  • 성원이의 현재 몸무게로 가능한 것을 모두 출력하라.
 

# 접근 방법

  • 각 자연수의 제곱을 기록해준다.
  • 이 때, 50,000의 제곱 - 49,999의 제곱이 99,999가 되므로 50000까지 투 포인터를 이용해 풀어준다.
  • 작은 수를 L포인터로, 큰 수를 R포인터로 사용하여
  • 둘의 차이가 G와 같은 경우 R포인터 +1 출력
  • G보다 작은 경우 R포인터 이동
  • G보다 큰 경우 L포인터를 이동시켜준다.
  
  
# 입력 G 킬로그램  
G = int(input())  
  
# 1~50000까지 제곱수  
weight = [i**2 for i in range(1, 50001)]  
result = 0  
  
# L과 R 포인터  
L, R = 0,1  
  
  
# R포인터가 범위를 벗어나지 않는 경우까지만 탐색  
while R < 50000:  
    sub = weight[R] - weight[L]  
  
    # 둘의 차이가 G와 같다면 출력해주고 1씩 증가  
    if sub == G:  
        print(R+1)  
        result = 1  
        L += 1  
        R += 1  
    # G보다 크다면 L을 한 칸 이동시켜준다.  
    elif sub > G:  
        L += 1  
    # 반대로 작다면 R을 한 칸 이동시켜준다.  
    elif sub < G:  
        R += 1  
  
if result == 0:  
    print(-1)
728x90