Python/Algorithm

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... n을 d(n)의 생성자라..
3. 확장 - K번째 큰 값 핵심 아이디어: 삽입정렬 첫번째 방법인 정렬의 경우 이 문제를 구현하는 것은 매우 쉽다. 원 코드에서는 반환값에서 두 번째를 의미하는 1을 인덱스로 했는데 그 대신 새로 받은 K-1번째 값을 반환하면 된다. 코드는 대략 이렇게 된다. def kth_largest_number(arr, K): unique_nums = set(arr) sorted_nums = sorted(unique_nums, reverse=True) return sorted_nums[K-1] 함수의 이름의 접두사를 second 가 아닌 K번째를 의미하는 kth 로 변경했다. 그리고 사용자가 원하는 순서를 뜻하는 K 인자를 받는다. 코드는 두 번째 큰 값을 찾던 원래 코드와 거의 일치하며, 반환할 때만 인덱스를 ..
1. 중복 포함/제거, sorting 활용 배열을 내림차순 정렬하고, 두 번째 값을 출력한다. arr = [10,30,30,20] sorted(arr, reverse=True)[1] #30 만약 중복을 허용하지 않고 두 번째 큰 값을 출력하고 싶으면 set 함수를 이용한다. arr = [10,30,30,20] uniq = set(arr) sorted(uniq, reverse=True)[1] #20 set() 을 통해 정렬 전에 고유한 값만 남기는 작업을 추가하면 된다. 2. 중복 제거, for문 최대값과 두 번째 큰 값을 추적하는 변수를 두고, 배열의 각 값을 순회하며 두 변수를 갱신한다. first는 가장 큰 값, second는 두 번째로 큰 값이 들어갈 변수다. def findsecond(arr): ..
noodle-dev
'Python/Algorithm' 카테고리의 글 목록 (2 Page)