범위 안의 소수 찾기

최경락 (K_ROCK_)·2021년 11월 14일
post-thumbnail

이렇게 풀었습니다.

function listPrimes(num) {
  let primeList = ''

  for (let i = 2; i <= num; i++) { // 2이상의 수인 num을 받고, num까지 반복한다.
    let isPrime = true; // 소수라면 true 를 반환한다.

    for (let n = 2; n < i; n++) { // 현재 i가 가진 값까지 n을 비교하여 소수인지 판별한다.
      if (i % n === 0) {
        isPrime = false // 소수는 자신과 1 이외에는 나누어지지 않으므로, 나누어지는 숫자가 있다면 false를 반환한다.
      }
    }
    if (isPrime) { // 반환된 isPrime 이 true 라면 아래의 내용을 거쳐 출력해라.
      primeList = primeList + i + '-' 
    }
  }
  return primeList.slice(0,-1) // 마지막 '-' 를 지운다.
}

입력받은 범위 안의 소수들을 나열하라.

  • 나의 응용력이 정말 바닥을 긴다는 사실을 절실히 알게 해준 문제.
  • 문제를 이해하고, 코드를 쳐보고, 코드를 이해하는데 정말 오랜시간이 걸렸다.

시작부터 난관

  • 문제를 보고 실소가 나왔다.
  • 그리고 '모르겠다....' 라는 생각을 거의 30분은 하지 않았나.....

시행착오들

왜 인지 자꾸 false 가 반환되던 오류

  • return 을 잘 못 사용해서 생기는 현상이였다.
    return 이 값을 반환하면 반복문이 종료된다는 사실을 다시 한 번 상기 시킬 수 있었다.
    쌓여나가는 값을 얻고자 할 땐 return 보다는 변수에 값을 쌓아가는 것이 더 적합하다.
  • 위와 비슷한 오류로 숫자가 단 하나만 쌓이는 오류가 있었다. 역시 return 의 사용으로 인해 반복문이 더 작동하지 않고, 하나의 값을 더하고, return 을 만나 종료되는 것이였다.

갑자기 순서대로 쌓이는 숫자들

  • for 문의 위치가 문제였다.
  • isPrime 이 소수의 판단을 마치고 true 를 반환 할 때, 값을 출력하기 위한 for문이 소수임을 확인하고, true 일때만 출력해야 했다.
  • 하지만 출력을 위한 for 문이 true 라는 값을 받은 후 계속 해당 for 문에서만 계속 반복되어 반복되는 횟수를 전부 출력하고 있었던 것이다.
  • 위의 문제를 해결하기 위해 레퍼런스를 참고하여 출력 for 문의 위치를 바꿔주었다.

입력범위 내의 모든 홀수가 출력되는 오류

  • 이 오류는 반복되는 숫자가 중복 출력되는 오류와 함께 일어났다.
  • 연달아 출력되는 오류를 해결하기 위해 break 를 함께 사용했지만, 결과는 홀수가 출력되고 있었다.
  • 원인은 if 의 위치였다.
  • for 문의 위치를 변경하고 소수임을 판단하는 if출력을 위한 if 로 나누어 사용하였다.
  • 여기서 두 if 가 같은 for문 안에 위치하게 되면서, 모든 경우의 수를 판단한 후 소수의 여부를 판단하여 출력하는 것이 아니라,
    나누었을 때 나머지가 0이 아닌 경우에도 isPrimetrue로 판단하여 출력 한 것 이였다.
  • 그러다 보니 나머지가 0이 아닌 모든 경우에 출력하게 되면서 중복 출력되는 오류가 함께 발생하게 되었다.
  • break 를 사용하여 반복은 멈췄지만, 남은 건 홀수 출력이였다.
  • 출력을 위한 if 문의 위치를 for 문의 바깥에 작성해줌으로써 정상적으로 소수의 판단이 진행되고 반환되는 isPrime 값을 받아 정상적으로 출력되게 되었다.

이번 문제를 풀며 느낀 점

  • 응용하는 능력이 많이 부족하다는 것을 이 문제에서 정말 크게 느꼈다.
  • 레퍼런스를 참고하는 것과 검색을 하면 안되는 것으로 생각하지 말자.
  • 괜한 마음에 참고하는 것을 굉장히 꺼려했는데, 오히려 참고하면서 다른 점과 틀린 점을 배우고, 문제를 해결 할 수 있는 인사이트를 얻는 것이 정말 중요하다는 것을 느꼈다.
  • 개발자 도구의 디버깅을 잘 이용하는 게 정말 중요하다.
    → 내가 쓴 코드가 어떻게 작동하는지 확인하고, 수정해야 할 지점이 어디인지 아는 것은 문제를 해결하는 데 정말 큰 도움이 된다.
  • 디버깅을 잘 사용하는게 큰 도움이 된다고 말씀해주신 동기님께 정말 감사하단 말을 전해드리고 싶다.

0개의 댓글