[TIL] 카테고리/알고리즘 문제풀기

[자바스크립트] 프로그래머스 Lv.1 소수 찾기

티레이니 2022. 5. 27. 12:55

 

 

우와 이건 조금 힘들었다. 원래 어제 풀었어야 하는데,

쉽지 뭐~♬ 하고 풀어서 제출했더니 타임 아웃이 떠서

??? 상태로 수학 공부를 하다가 오늘 아침에야 풀었다

(.....) 

 

처음에는 2와 n 사이의 모든 숫자가 소수인지 검증하는 알고리즘에서
(1은 어차피 아니니까...)

 

2와 n의 제곱근 사이의 소수를 구해 배열에 넣었다가

다시 2와 n 사이의 숫자가 배열에 있는 숫자로 나누어 떨어지는지 검증했다.

 

이렇게 숫자를 줄여서도 혹시 또 타임아웃 걸릴까봐

무언가로라도 나누어떨어지는순간 break를 때렸다..

 

 

let temp = []
let prime = true

for(i=2; i <= Math.sqrt(n); i++) {
  for(j=2; j<i; j++) {
  prime = true
    if(i % j === 0){
      prime = false
      break;
    } 
  }
  if (prime === true) {
    temp.push(i)
  }
}

for(i=2; i<=n; i++) {
  prime = true
  for(j=0; j<temp.length; j++){
    if(i%temp[j] === 0 && i !== temp[j]) {
      prime = false
      break;
    }
  }
  if (prime === true) {
    answer++
  }
}

 

어찌어찌 넘어갔다. 다행이다..

 

다른 사람들 풀이는 더 짧은것도 많긴 한데

딱히 우와- 스러운건 몇개 없어서 그냥 눈으로만 봐뒀다.

 

다른 사람들이 쓴 방법들

- 무언가로 나누어지는 수를 카운트해서 n에서 빼준다

- if문에서 && 사용할때 왼쪽이 true 라면 오른쪽 값이 반환되는 성질을 사용해서
   소수들을 &&로 무지막지하게 엮어두셨다. 광기가 느껴졌다.

  그 다음에는 다시 삼항 연산자를 중첩... 몇항이야 이거. 광기가 더++ 느껴졌다.

  4줄이라고 해줘도 좋은지 모르겠지만 4줄짜리 코드다.

- Set을 사용한다 -> 코드는 예뻤는데 배열 쓰는 것 보다 속도가 더 느리다고 한다. 그래도 예뻤다..