이번주 집중이 안된다.
요즘 곧 잘 쓰고 있는 챗GPT 프롬프트
알고리즘 [코드]의 평가를 해줘. 기준은 시간 복잡도와 공간 복잡도, 클린 코드인지 봐줘. 평가 문장은 짧고 간결하게 해주고 각각의 평가 요소를 기준으로 10점 만점을 기준으로 점수를 매겨줘. 그리고 마지막엔 내 코드를 리팩토링해서 어떻게 리팩토링 하는게 좋은지 짧고 간결하게 설명을 해줘.
[코드]:
답변은 이렇게 나온다.
평가 요소:
시간 복잡도: 6/10
공간 복잡도: 8/10
클린 코드: 7/10
시간 복잡도는 세 개의 반복문을 사용하여 nums 배열에서 세 개의 숫자를 선택하는 과정을 포함하고 있습니다. 첫 번째 반복문은 n-2번, 두 번째 반복문은 n-1번, 세 번째 반복문은 n번 수행되므로 총 시간 복잡도는 O(n^3)입니다. 이는 입력 크기에 비례하여 크게 증가하므로 6/10의 점수를 줄 수 있습니다.공간 복잡도는 추가적인 배열이나 데이터 구조를 사용하지 않고, 입력 값 nums와 상수 변수만을 사용하므로 O(1)의 공간 복잡도를 가집니다. 입력 크기와 상관없이 일정한 공간을 사용하므로 8/10의 점수를 줄 수 있습니다.
클린 코드 측면에서는 변수명이 명확하게 사용되고 있습니다. 다만, 코드의 구조가 중첩된 반복문과 조건문으로 인해 가독성이 떨어질 수 있습니다. 또한, 소수 판별을 위한 반복문에서 parseInt(Math.sqrt(plus))를 반복적으로 계산하고 있습니다. 이 값을 변수로 저장하여 계산 횟수를 줄이는 것이 좋습니다.
리팩토링을 통해 개선된 코드:
function solution(nums) { let answer = 0; for (let i = 0; i < nums.length - 2; i++) { for (let j = i + 1; j < nums.length - 1; j++) { for (let k = j + 1; k < nums.length; k++) { const plus = nums[i] + nums[j] + nums[k]; let isPrime = true; const sqrt = parseInt(Math.sqrt(plus)); for (let y = 2; y <= sqrt; y++) { if (plus % y === 0) { isPrime = false; break; } } if (isPrime) { answer++; } } } } return answer; }
리팩토링된 코드에서는 반복문의 범위를 nums.length - 2, nums.length - 1, nums.length으로 변경하여 인덱스 범위를 조정하였습니다. 또한, parseInt(Math.sqrt(plus)) 값을 sqrt 변수에 저장하여 반복문 내에서 반복적인 계산을 피하였습니다. 이를 통해 코드의 가독성과 효율성을 개선하였습니다.
...내가 직접 쓴 프롬프트, 이것보다 더 좋은 프롬프트가 있을 수도 있다.