배열 nums와 값 k가 주어졌을 때, 아래 연산 규칙에 따라 배열의 마지막까지 도달할 수 있는지 판별하는 문제입니다.
문제 규칙
- 배열
nums를 순서대로 탐색합니다. - 현재 값이 소수가 아니면
k를 1 감소시킵니다. - 현재 값이 소수라면
k를 초기값으로 되돌립니다.
예제 살펴보기
입력이 nums = [8, 5, 6, 7, 8], k = 2라고 가정해 보겠습니다.
nums[0] = 8은 소수가 아니므로 k = 1nums[1] = 5는 소수이므로 k = 2로 리셋nums[2] = 6은 소수가 아니므로 k = 1nums[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