(x, y) 형식으로 몇 가지 다른 쌍이 주어졌다고 가정합니다. 여기서 x는 숫자의 밑수를 의미하고 y는 숫자 자체를 의미합니다. 목록에는 동일한 의미의 쌍이 있습니다. 주어진 숫자 쌍에서 일치하는 수를 확인해야 합니다. 주어진 쌍은 중복될 수 있으며 잘못된 기본 번호 조합을 포함할 수도 있습니다.
따라서 입력이 num_inputs =2, input_arr =[(10, 15), (8, 17)]과 같으면 출력은 1이 됩니다.
num_inputs 변수는 입력 수를 지정하고 input_arr 배열은 숫자 쌍을 나열합니다. 여기에서 두 쌍을 보면; 10진법(십진수)의 15는 8진법(8진법)의 17과 같습니다. 따라서 하나의 일치 항목이 있고 출력 값 1을 반환합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
arr_len :=input_arr의 크기
-
temp_dict :=정수 값을 포함하는 새 맵
-
범위 0에서 num_inputs에 있는 i에 대해 수행
-
num_base :=input_arr에서 쌍 i의 첫 번째 숫자의 문자열 표현
-
num_val :=input_arr에서 쌍 i의 두 번째 숫자의 문자열 표현
-
temp_dict[정수 표현 of(num_val, 정수 표현 of(num_base)) ] :=temp_dict[정수 표현 of(num_val, 정수 표현 of(num_base)) ] + 1
-
- cnt :=0
- temp_dict의 모든 값 목록에 있는 각 값에 대해 다음을 수행합니다.
- cnt :=cnt + value* ((값 - 1) / 2)의 하한값
- 반환 cnt
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from collections import defaultdict def solve(num_inputs, input_arr): arr_len = len(input_arr) temp_dict = defaultdict(int) for i in range(num_inputs): num_base, num_val = str(input_arr[i][0]), str(input_arr[i][1]) temp_dict[int(num_val, int(num_base))] += 1 cnt = 0 for value in temp_dict.values(): cnt += value*(value - 1)//2 return cnt print(solve(2, [(10, 15), (8, 17)]))
입력
2, [(10, 15), (8, 17)]
출력
1