PS알못 OrbitHv의 PS logo PS알못 OrbitHv의 PS

태그:

8. 기본 수학 1 CLASS 2

벌집의 위치에 따라 중앙으로부터 얼마나 떨어져있는지 구하는 문제입니다. 1의 경우는 정중앙이므로 거리가 1, 2~7은 거리가 2, 3~19는 거리가 3, …입니다. 이것의 규칙을 찾으면 쉽게 풀 수 있습니다. 이 문제는 삼각수와 관련이 있는데, 주소에서 4를 더한 값을 6으로 나눈 몫을 보겠습니다.

주소 (주소+4)을 6으로 나눈 몫
1 0
2~7 1
8~13 2

몫이 1인 곳은 거리가 2, 몫이 2 또는 3인 곳은 거리가 3, 몫이 4, 5, 6이면 4, 몫이 7, 8, 9, 10이면 5, …의 규칙이 생깁니다. 즉 n-1번째 삼각수보다 크고 n번쨰 삼각수보다 작거나 같은 몫을 가지면 답이 n이 되는 것이죠. 이제 이것을 함수로 만들어보겠습니다. 먼저 n번째 삼각수를 구하는 공식인 \(\frac{n(n+1)}{2}\)이 있을 때 n을 구하는 공식이 필요합니다.

\[S_n=\frac{n(n+1)}{2}\\ 8S_n=8\frac{n(n+1)}{2}=4n^2+4n\\ 8S_n+1=4n^2+4n+1=(2n+1)^2\\ \sqrt{8S_n+1}=2n+1\\ n=\frac{\sqrt{8S_n+1}-1}{2}\]

만약 Sn 자리에 삼각수가 아닌 다른 수를, 예를 들어 n번째 삼각수와 n+1번째 삼각수 사이의 수를 집어넣으면 n과 n+1 사이의 실수가 나옵니다. 그런데 우리가 찾는 것은 n-1번째 삼각수보다 크고 n번째 삼각수보다 작거나 같은 몫을 가질 때 n을 반환하는 것이므로 위 식을 적용한 후 올림을 하면 되겠습니다. 이제 마지막으로 Sn 자리에 넣을 수는 위에서 구한 (주소+4)를 6으로 나눈 몫을 사용하면 답이 나올 것입니다. 이를 정리하여 답을 계산하면 됩니다.

사실 이 문제는 거리가 n인 점의 범위를 구하고 이 범위에 속하면 n을 출력하고 그게 아니면 n+1인 점의 범위를 구한 후 다시 비교하는 식의 반복문을 사용하는 것이 정석인 것 같습니다.

소스 코드

언어 코드 시간
Python 3 코드(Github) / 코드(백준) 2020-03-25 19:45:49