양의 정수와 또 다른 양의 정수 m을 포함하는 크기 n의 목록이 제공된다고 가정합니다. 현재 루프 내부에 있고 각 반복에서 배열의 일부 요소 값을 1로 줄이고 나머지 요소의 값을 m만큼 증가시킨다고 가정해 보겠습니다. 목록의 요소 중 절반 이상이 몇 번의 반복 후에 0으로 바뀌는지 알아내야 합니다. 가능하면 True를 반환하고 그렇지 않으면 False를 반환합니다.
따라서 입력이 input_list =[10, 18, 35, 5, 12], m =4와 같으면 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- frequency_list :=0으로 초기화된 m+1 크기의 새 목록
- i :=0
- 내가
주파수 목록[입력 목록[i] 모드(m + 1) ] :=
주파수 목록[입력 목록[i] 모드 (m + 1) ] + 1
- 나는 :=나는 + 1
- if frequency_list[i]>=(input_list의 크기 / 2) 이면
- 루프에서 나오다
- 나는 :=나는 + 1
- 참 반환
- 거짓을 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(input_list, m): frequency_list = [0] * (m + 1) i = 0 while(i < len(input_list)): frequency_list[(input_list[i] % (m + 1))] += 1 i += 1 i = 0 while(i <= m): if(frequency_list[i] >= (len(input_list)/ 2)): break i += 1 if (i <= m): return True else: return False input_list = [10, 18, 35, 5, 12] print(solve(input_list, 4))
입력
[10, 18, 35, 5, 12], 4
출력
True