On Call
아마존에 오기 전 아마존이 다닐만한 회사인지 조사하는 데, 온콜에 대한 불만을 토로하는 글이 많이 보였다. 온콜이 뭐길래 그러지? 사전을 찾아보니 다음과 같이 설명되어 있다. 우리 말로 하면 '당직'과 비슷한 개념일 것 같다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
무리수인 제곱근들의 자릿수 더하기
이 문제를 푸는 데 Math.sqrt
를 사용할 수는 없다. Math.sqrt
가 리턴하는 double
형의 유효자리 숫자는 고작 17자리에 불과하다. 제곱근의 자릿수를 원하는 만큼 구할 수 있는 다른 방법이 필요하다. 다행히 Sqrt root by substraction에 정수의 제곱근을 구하는 방법이 자세히 나와 있다.
접속 기록으로부터 비밀번호 알아내기
접속 기록 데이터가 많지 않으므로 코드를 아무렇게나 짜도 답을 빠르게 구할 수 있을 것이다. 먼저 다음과 같이 접속 기록을 읽는 코드를 작성한다.
(def keylog
(-> (slurp "data/keylog.txt")
(clojure.string/split #"\r\n")
distinct
sort))
중복을 제거하면 접속 기록이 서른 세 개밖에 되지 않는다.
동전을 여러 더미로 나누는 경우의 수 세기
동전을 여러 더미로 나누는 방법의 수는 정수를 덧셈으로 표시할 수 있는 방법의 수와 같다. 위키백과를 찾아보면 다음과 같이 공식이 나와 있다.
을 증가시키면서 을 구해 1백만으로 나누어 떨어지는지 확인하는 방법으로 답을 찾을 수 있다. 을 구하는 데 필요한 는 다음과 같이 쉽게 구현할 수 있다.
며칠 전 아주 지겨워 보이는 작업을 하게 되었다. 엑셀 파일에 있는 정보를 참고해 설정 파일을 수정하는 일이었다. 설정 파일은 국가별 설정 정보를 담고 있는데 각 국가별 설정에 새로운 필드를 추가해야 하고 필드의 값은 엑셀 파일을 참조해 지정해야 했다.
아마존에 오기 전 아마존이 다닐만한 회사인지 조사하는 데, 온콜에 대한 불만을 토로하는 글이 많이 보였다. 온콜이 뭐길래 그러지? 사전을 찾아보니 다음과 같이 설명되어 있다. 우리 말로 하면 '당직'과 비슷한 개념일 것 같다.
소수의 합으로 나타내는 방법이 5000가지가 넘는 최초의 숫자는?
이 문제도 바로 전에 풀었던 문제 76과 마찬가지로 문제 31비슷하다. 여기서는 동전의 종류가 소수라고 생각하면 된다. 따라서 인덱스를 넣으면 소수가 나오는 맵을 만들어 두면 문제 풀이에 활용할 수 있다. 소수는 100개 정도 준비하면 충분할 것 같다.
숫자 100을 두 개 이상의 자연수의 합으로 나타내는 방법은 모두 몇 가지?
이 문제는 영국 화폐 액면가를 조합하는 수를 계산했던 문제 31과 비슷하다. 문제 31에서는 동전의 종류가 여덟가지 였지만, 이 문제에서는 동전의 종류가 1, 2, ..., 99까지 99가지가 있다고 생각할 수 있다.
동료와 리팩터링하다 다음과 같은 코드를 만났다.
private Map<String, Integer> getCountryCodeCountMap(String customerId) {
List<String> countries = getCountryList(customerId);
Map<String, Integer> countryCodeMap = new HashMap<>();
for (String cc : countries) {
if (StringUtils.isNotBlank(cc)) {
countryCodeMap.put(cc, countryCodeMap.getOrDefault(cc, 0) + 1);
}
}
return countryCodeMap;
}
직각삼각형을 만들어내는 방법이 한 가지 뿐인 경우 세기
합이 이하인 피타고라스 수(Pythagorean Triplet)의 시퀀스를 생성한 다음, 합으로 group-by
해서 값(피타고라스 수 목록)의 길이가 인 키의 개수를 세면 된다. 피타고라스 수를 구하는 방법은 문제 39에서 설명했다.
자릿수의 계승값을 더해갈 때, 반복이 일어나기 전의 단계가 60번인 경우 찾기
각 자릿수의 계승값을 더하는 함수는 다음과 같이 간단히 작성할 수 있다.
(defn- fact-sum [n]
(->> (digits n)
(map factorial)
(apply +)))