엄청난 문제다.
사실 비슷한 문제를 풀어본 적 있지만 전혀 생각 못했다.
일단 풀이는 나중에 적고, 구현중에 자연수의 제곱수인지 아닌지를 판단해야 하는 부분이 있는데, 나는 여태 제곱수 판별할 때 끝자리가 0, 1, 4, 5, 6, 9인지 보고 아니면 O(루트N)만큼 돌리는 정도밖에 몰랐는데... 일단 이분탐색으로 찾아보는 방법이 있고, 또 하나
sqrt를 이용하고 그 값을 정수자료형에 넣고 그 정수를 제곱해서 원래 제곱수가 되는지 확인하는 방법이 있다... 두 번째 방법은 주의할 점이 정수자료형에 넣으면서 데이터 손실이 일어나기 때문에 그리고 오차도 있고 여차저차해서 구한 값이 n이면 n*n 뿐 아니라 (n+1)*(n+1)값도 비교를 해봐야 한다고 한다. 안전하게 하려면 (n-1)*(n-1)..까지도..? 나중에 잘 생각해 봐야겠다. 형변환 할 때 버림 혹은 올림이 되는 것과 연관해서 생각해보면 될 것 같다.
댓글 없음:
댓글 쓰기