TIL

2024.01.04 TIL #알고리즘 #반복문 안 return문

inz1234 2024. 1. 4. 23:26

[알고리즘 예제 1]

어떤 수 n이 소수인지 판별해라.

 

- 소수라는 것의 정의가 '1과 자기자신 이외에는 약수를 갖지 않는 수' 여서 이렇게 코드를 짜봤다.

 

내 코드 

 
 function abc(num) {
   
    for ( i = 2; i < numi++ ) {
 
    if ( num / num === &&  num % !==  0 ) {
        return true;
    } else {
        return false
    }
    }
 }

 console.log(abc(25));   // true
 

 

처음에 이렇게 풀어봤는데 25를 넣었더니 true가 나왔다.

그 외에 24를 넣어도, 12를 넣어도 true가 나온다.

12, 24, 25는 소수가 아닌데.. 무엇이 잘못 되었을까?

그 이유는 바로

반복문 안에 여러 개의 return 문이 있을 때, 첫 번쨰 반복에서 return이 실행되면
함수는 즉시 종료되어 남은 반복이 실행되지 않는다! 

 

 

즉, 저 코드에서는 무슨 수를 넣어도 첫 번째 조건인 num / num === 1  에 부합하여 무조건  return  true; 가 실행되기 때문에 두 번째 조건까지는 가보지도 못하고 함수가 종료되는 것!

 

=> 그렇기 때문에 반복문 안에 조건문이 있고 그 안에 다시 return문이 있다면 조건은 하나만 넣어줘야 한다는 걸 배웠다. 

 

- 그럼 저 코드에서 반복문 안의 조건문에는 하나의 조건만 넣어서 고쳐보자.

 

수정한 코드

 

 function abc(num) {
                                                       // 원래 하나의 조건문에 두 개였던 조건을 나누어 두 개의 조건문을 만들었다.
  if (num / num !== 1) {         // 이 조건문은 num/num 의 값이 i 의 영향을 받지 않기 때문에 사실 반복문 안에
    return false;                     // 들어가도 상관은 없지만, 좀 더 깔끔한 코드를 위해 뺐다.
  }                        
    for ( let i = 2; i < num; i++ ) {
 
      if ( num % i === 0 ) {
        return false;
     }
        else {
       return true;
     }
   }
 };

 

 console.log( abc( 18 ) );  // false
 

 


오늘의 느낀 점

오늘 배운 게 정말 많지만 이것을 TIL 에 올린 이유는 아주 기본적인 것인데 내가 몰랐던 것이기 때문이다. 

후 쫌,, 힘들다ㅠㅠ 알고리즘 공부하느라 강의를 못 들어서 월요일까지인 과제 제출을 토요일에나 시작할 수 있을 것 같다.

휴우...