본문 바로가기
코딩테스트

프로그래머스 Javascript 코딩 테스트 Lv.0 합성수 찾기

by 곰인간 2023. 7. 21.

합성수 찾기

합성수란, 1과 자기 자신을 제외한 약수를 가진 수

자연수 n이 매개변수이고, n 이하의 합성수의 개수를 구해야한다.

시작부터 머리아프다.

일단 예제를 보면 매개변수 n이 10일 때, 합성수는 4, 6, 8, 9, 10으로 총 5개이다.

function solution(n) {
   let result = [];
  for (let i = 2; i <= n; i++) {
    for (let j = 2; j < i; j++) {
      if (i % j === 0) {
        result.push(j)
          break
      }
    }
  }
  return result
}

문제는 이중 for문을 사용하였고,

짜피 1은 필요없으니 2부터 시작해보자,

먼저 i가 2 일 때, j는 시작이 2인데 조건문이 j가 i보다 작으니 바로 넘어가자

i = 3, j = 2 >>> 3 % 2의 결과값은 0이 아니므로 조건을 만족하지 못 함.

i=4, j=2~3 >>> 먼저 4 % 2를 하는데 결과값이 0이므로 조건식을 통과하고 result에 push를 한다. 

그리고 걸리는 break 3은 뛰어넘는다.

j의 값을 result에 push했으니 result = [2]

i = 5, j=2~4 보나마나 0이 안됨

i=6, j=2~5 >>> 6%2 조건식 통과 되니까 바로 push

result = [2, 2]

3도 되는데 왜 안넣냐? break가 고장난 eight ton truck이 아니라서 

i=7, j=2~6 이거도 꽝

i=8, j=2~7, 8%2 니깐 2를 push

result = [2, 2, 2]

i=9, j=2~8, 9%2는 꽝 9%3은 통과

result = [2, 2, 2, 3]

i=10, j=2~9, 10%2 통과

[2, 2, 2, 3, 2]가 최종으로 result의 배열이되고

최종적으로 result의 길이만큼 반환하면 짜잔 끝입니다.


여담으로, 문제 정답률이 86%라고 되어있는데...

천재들만 있는거냐...

아님 내가 바본가...

1시간 동안 머리 싸메다가 겨우 풀었다 ㅠㅠ

댓글