Java에서 배열 합치기
옆 자리 동료가 Java에서 배열을 합치는 간단한 방법이 있는지 질문했다. 열 개 정도의 배열을 하나로 합치고 싶다는 것이었다. 당장 떠오른 방법은 System.arraycopy
를 사용하는 것이었지만 이걸 몰라서 물어보지는 않았을 것이다. System.arraycopy
를 사용하면 효율적이긴 하겠지만 코드는 별로 예쁘지 않을 것이다. 혹시 이미 이 기능을 구현한 라이브러리가 있나 확인했지만 찾을 수 없었다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
분모가 12,000 이하일 때 1/3과 1/2 사이에 위치한 기약 진분수의 개수
분모가 12,000 이하인 경우만 조사하면 되므로 분자와 분모에 12,000 이하의 수를 대입해가며 분수를 만들어 1/3과 1/2 사이의 기약 진부수를 세는 방법으로 답을 구할 수 있을 것 같다. 분모는 3부터 12,000까지, 분자는 분모/3 ~ 분모/2 사이의 정수를 대입해보면 된다.
분모가 1백만 이하인 기약 진분수의 개수
분모가 인 경우 기약 진분수의 개수는 와 서로 소인 정수의 개수와 같다. 이는 Euler’s totient function의 정의와 동일하다. 따라서 분모가 1백만 이하인 기약 진분수의 개수를 라 하면 는 다음과 같이 구할 수 있다.
기약 진분수를 커지는 순으로 늘어놓기
분모가 보다 작거나 같은 0과 1 사이의 기약 진분수의 수열을 Farey sequence라 한다. 이 수열에서 와 가 이웃이고 면, 두 수의 차는 가 되어야 한다.
옆 자리 동료가 Java에서 배열을 합치는 간단한 방법이 있는지 질문했다. 열 개 정도의 배열을 하나로 합치고 싶다는 것이었다. 당장 떠오른 방법은 System.arraycopy
를 사용하는 것이었지만 이걸 몰라서 물어보지는 않았을 것이다. System.arraycopy
를 사용하면 효율적이긴 하겠지만 코드는 별로 예쁘지 않을 것이다. 혹시 이미 이 기능을 구현한 라이브러리가 있나 확인했지만 찾을 수 없었다.
그간 생각을 정리하려고 꾸준히 노력했다. 갑자기 떠오른 아이디어, 새롭게 배운 지식, 책에서 본 마음에 드는 구절, 이것 저것에 대한 잡생각 등 마음만 먹으면 쓸 거리는 넘쳐난다. 자발적으로 작성하는 문서는 모두 미래의 나를 위한 것이다. 그냥 보관하는 것이든 블로그에 공개하는 것이든 다른 사람에게 보여주기 보다는 내가 잊지 않으려고 정리하는 것이다. 그동안 글을 쓰는 데 여러 도구를 사용했다. 어떤 도구를 거쳐 지금에 이르렀는지 정리하는 것도 재미있을 것 같다.
φ(n)이 n의 순열이 되는 수 조사하기
이 의 순열이 되는 수 중에서 이 최소가 되는 을 구해야 한다. 이 다음과 같이 표현될 수 있음을 문제 69에서 확인했다.
n/φ(n)이 최대가 되는 1백만 이하의 n 찾기
Euler's totient function을 보면 의 공식을 확인할 수 있다. 을 구하려면 의 모든 소수 약수를 하나씩 넣어가며 곱을 수행해야 한다.
입사한 지 두 달 만에 의미 있는 일을 하게 되었다. 새로운 프로젝트에서 사용할 메트릭 라이브러리를 만드는 작업이었다. 서비스가 호출될 때 또는 서비스 내에서 다른 다운스트림 서비스를 호출할 때 메트릭 정보를 남겨두면 모니터링 도구를 이용해 서비스가 호출된 횟수, 요청을 처리하는 데 걸린 시간, 다운스트림 서비스를 호출하는 데 걸린 시간, 오류 발생 빈도 등을 확인할 수 있다. 아마존은 이미 이런 작업을 위한 내부 도구를 갖추고 있다. 메트릭 정보를 기록하는 라이브러리도 있다. 내가 할 일은 우리 팀에서 새로 개발할 서비스에서 메트릭 정보를 쉽게 남길 수 있게 하는 라이브러리를 만드는 일이었다.
AB 테스트에 대한 글을 읽으면, 간단한 문구 수정이나 버튼 색상 변경 만으로도 전환율이 몇 배 이상 높아졌다, 매출이 몇 십 퍼센트 늘어났다는 주장을 쉽게 볼 수 있다. 단순한 변경만으로 그런 극적인 효과를 얻을 수 있다는 게 미덥지 않지만, 어떤 변경이 긍정적 효과를 주는지 확인하는 수단으로 AB 테스트는 좋은 방법이다.
마방진 성질을 갖는 5각 도형에서 얻을 수 있는 16자리 수의 최대값 구하기
5각 도형의 빈 칸을 다음과 같이 로 지정할 수 있다.