[6/20 TIL]생각 정리 / 쓰고 있는 챗GPT 프롬프트

haegnim·2023년 6월 20일
0

TIL

목록 보기
17/52

이번주 집중이 안된다.

더 좋은 방법이 있을 거야

  • 이전과 같이 써보고 싶은 문법에 치중하여 알고리즘 문제를 풀고 있었다. 문제 풀이 후, 번번히 더 쉬운 방향이 있음을 알게 되었다.
  • 단순히 코드를 짧게 쓰는 게 좋지 않더라. 시간 복잡도도 생각하고 다른 사람이 알기 쉽게도 써야한다.
  • 아직 무엇이 좋은지 스스로 평가하기 어려워서 챗gpt의 평가에 의존하고 있는 것 같다. 책도 읽어보고 좋은 코드나 알고리즘 작성에 대해 공부해야한다.

챗GPT 프롬프트 : 알고리즘 평가 및 리팩토링

요즘 곧 잘 쓰고 있는 챗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 변수에 저장하여 반복문 내에서 반복적인 계산을 피하였습니다. 이를 통해 코드의 가독성과 효율성을 개선하였습니다.

...내가 직접 쓴 프롬프트, 이것보다 더 좋은 프롬프트가 있을 수도 있다.


자료구조와 알고리즘 공부의 필요성을 느꼈다

  • 집중이 안되니까 유튜브에 있는 무료 강의라도 들었다. 그중에서 알고리즘을 알면 좋은 이유에 대한 유튜브를 봤는데...
    코딩 테스트, 당신이 몰랐던 10^8가지 사실 - 저세상개발자
    -> 알고리즘 문제마다 입력 제한을 넣어주는 이유와 이를 통해 Big-O 노테이션을 추정할 수 있다는 사실을 알았다.
  • 생각보다 자료구조와 알고리즘에 대한 지식이 중요한가봐. 다시 강의를 듣기 시작했다. 제공받은 강의는 파이썬이다. 아직 파이썬을 익히지 못해서 개념만 듣고 자바스크립트 자료를 찾기 위해 서칭서칭👩‍💻
  • 자바스크립트 알고리즘 강좌의 목차 정보를 저장했다. 내일은 이 목차 정보를 토대로 지금까지 풀었던 문제를 다시 한번 보면서 정리하는 시간을 가지려고 한다.

0개의 댓글