Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

주어진 숫자 K로 파이썬에서 배열의 끝에 도달할 수 있는지 확인하는 방법

배열 nums와 값 k가 주어졌을 때, 아래 연산 규칙에 따라 배열의 마지막까지 도달할 수 있는지 판별하는 문제입니다.

문제 규칙

  • 배열 nums를 순서대로 탐색합니다.
  • 현재 값이 소수가 아니면 k를 1 감소시킵니다.
  • 현재 값이 소수라면 k를 초기값으로 되돌립니다.

예제 살펴보기

입력이 nums = [8, 5, 6, 7, 8], k = 2라고 가정해 보겠습니다.

  • nums[0] = 8은 소수가 아니므로 k = 1
  • nums[1] = 5는 소수이므로 k = 2로 리셋
  • nums[2] = 6은 소수가 아니므로 k = 1
  • nums[3] = 7은 소수이므로 k = 2로 리셋
  • nums[4] = 8은 소수가 아니므로 k = 1, 마지막 인덱스에 도달

따라서 결과는 True가 됩니다.

해결 접근 방법

이 문제는 다음 단계로 해결할 수 있습니다.

  • temp 변수에 k의 초기값을 저장합니다.
  • i를 0부터 배열 길이 - 1까지 반복합니다.
    • arr[i]가 소수이면 k := temp로 초기화합니다.
    • 소수가 아니면 k := k - 1로 감소시킵니다.
    • 만약 k <= 0이면서 현재 위치가 마지막 인덱스가 아니고, 다음 값 arr[i + 1]도 소수가 아니라면 더 이상 진행할 수 없으므로 False를 반환합니다.
  • 반복이 모두 끝나면 True를 반환합니다.

아래 구현 예제를 통해 더 자세히 이해해 보겠습니다.

예제 코드

def isPrime(num):
   if num > 1:
      for i in range(2, num):
         if num % i == 0:
           return False
      return True
   return False
 
def solve(arr,k):
   temp = k
   for i in range(len(arr)):
      if isPrime(arr[i]):
         k = temp    
      else:
         k -= 1      
   
      if k <= 0 and i < (len(arr) - 1) and isPrime(arr[i + 1]) == False:
         return False
         
   return True

nums = [8, 5, 6, 7, 8]
k = 2
print(solve(nums, k))

입력

[8, 5, 6, 7, 8], 2

출력

True