신비한 개발사전

챗GPT와 대화하면서 배운 반복문의 조건 평가 본문

카테고리 없음

챗GPT와 대화하면서 배운 반복문의 조건 평가

jbilee 2023. 7. 20. 01:26

알고리즘 문제와 씨름하던 도중, 어떻게 동작하는지 이해할 수 없는 함수가 있어서 챗GPT한테 물어보기로 했다.

function solution(n){
  var count = 1;
  var sum=0;
  while( count=n ){
    sum = sum + n--;
    count++;
  }
  return sum;
}

 

1부터 인자로 받은 n까지의 숫자를 더해주는 함수다. while문 안의 `sum = sum + n--`가 `sum += n` 와 `n - 1`를 합친 것과 같은 동작을 한다는 것은 알겠는데, while문이 왜 무한으로 반복되지 않는지가 이해되지 않아서 챗GPT의 도움을 받기로 했다.

 

먼저 위 코드가 무엇을 하는지 포괄적인 질문을 해봤다.

 

단계별로 무슨 일이 일어나는지 친절하게 설명해주지만, 정작 내가 궁금했던 "루프가 끝나는 조건"에 대한 설명이 부족했다. 매 루프마다 count의 값을 n으로 하는게 어떻게 exit condition이 되는지 그 부분에 대해 추가적으로 물어봐야 했다.

 

 

그러더니 갑자기 해당 함수에 오류가 있다고 하는 것이다. 반복문이 반복될 때마다 `count`값이 새 `n`값으로 업데이트되는데, 이로 인해 while문에 들어가는 조건이 항상 true값이 되어서 반복문이 제대로 끝나지 않는다고 한다. 그러면서 반복문 조건에 있는 오류를 수정한 새 함수를 만들어줬다.

 

다만 챗GPT가 수정해준 함수는 실제로 사용해보면 1만 제외하고 그 어떤 숫자를 넣어도 전부 0을 반환하는 함수였다. 내가 처음에 물어봤던 함수는 제대로 동작하는 함수였는데, 궁금한 것에 대한 해답을 주지는 않고 오히려 오류가 추가된 함수를 회신해서 어떻게 해답을 찾아야 하나 고민이 됐다.

 

내가 전달했던 함수는 제대로 동작했다고 말하고, 단지 반복문의 조건이 `count=n`이었지만 왜 오류가 없었는지가 궁금했다고 했다.

 

그런데 이번에는 `while (count = n)` 이 부분에 대해 잘못된 판단을 했었다는 답이 돌아왔다. 다행히 추가 답변 중 "`count = n` assigns the value of `n` to `count ` and also evaluates to the assigned value (`n`)" 이라는 문장에서 중요한 힌트를 얻을 수 있었다. `count`에 새 값을 부여하는 것뿐만 아니라, 새로 부여된 값이 while문의 조건으로 평가된다는 것이다.

 

이제까지 비교 연산자만 사용하는 반복문 조건에 익숙해져 있어서 숫자 자체가 true/false한지 여부를 미처 고려해보지 못했던 것 같다. 개념을 확실히 이해하기 위해 숫자를 반복문 조건으로 사용해도 되는지 질문했다.

 

 

비로소 "0이 아닌 숫자는 모두 truthy한 값"이라는 중요한 개념을 배우게 되었다. 그렇다면 처음에 질문했던 함수에서, 반복문이 반복될 때마다 1씩 차감된 n값이 반복문의 조건으로 평가되도록 짜여져있기 때문에 n이 0에 도달할 때 falsy한 값이 되어서 반복문은 정상적으로 종료된다. 이 두 문장으로 간단하게 정리될 문제였는데... 어째선지 멀리 돌아오게 되었다. 챗GPT의 신뢰성을 의심하게 됐지만 덕분에 반복문의 조건에 대해 제대로 이해할 수 있게 됐다.

 

마지막으로 이번 대화를 통해 배운 것을 정리해서 다시 챗GPT에게 확인차 전달해봤다.

 

챗GPT도 나도 모두 완벽하게 이해한 결말이 나왔다! 앞으로도 코딩 공부를 하면서 챗GPT와 자주 대화할 것 같다.