코딩테스트/백준

[백준] 1484.다이어트 (Swift)

도지대디 2022. 5. 22. 18:54

[백준] 1484.다이어트 (Swift)

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

 

1484번: 다이어트

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

www.acmicpc.net

풀이

문제에서 나오는 G 는 (현재)^2 - (예전)^2 으로 표현할 수 있습니다. G 가 자연수이기도 하고 문제를 읽어보면 현재 몸무게가 예전 몸무게보다 값이 크다는 것을 알 수 있습니다.

 

문제의 조건을 만족하는 모든 경우의 수를 출력해야하기 때문에 예전 몸무게를 1, 현재 몸무게를 2라고 생각하고 차례차례 탐색해보겠습니다.

 

(현재)^2 - (예전)^2 라는 식을 조건식이라고 칭하도록 하겠습니다.

 

조건식이 입력받은 값 G 보다 작다면, 현재 몸무게값을 1 증가시킵니다. 그래야 두 몸무게간의 격차가 벌어져 조건식을 만족할 수 있는 가능성이 올라가기 때문입니다.

 

반대로 조건식이 G 보다 크다면, 예전 몸무게값을 1 증가시킵니다. 두 몸무게간의 격차를 줄이기 위함입니다.

 

만약 조건식이 만족된다면 해당 몸무게는 정답 중 하나이기 때문에 저장해놓습니다. 그리고 현재 몸무게와 예전 몸무게를 모두 1 증가시켜줍니다. 조건식이 만족해 정답을 하나 찾았으니 여기서 격차를 벌이거나 줄이는것은 의미가 없기 때문입니다.

 

만약 현재 몸무게와 예전 몸무게의 차이가 1인데, 조건식이 G 보다 크다면 프로세스를 종료하고 정답을 출력합니다.

 

이 경우의 수 이후로 모든 조건식은 G 보다 큰 값이 도출되기 때문입니다. 

 

이렇게 투포인터의 개념을 응용하여 코드를 작성한다면 어렵지 않게 문제를 풀이할 수 있습니다.

 

코드