Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

(base, number) 쌍을 포함하는 배열에서 일치하는 수를 찾는 Python 프로그램

<시간/>

(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