[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을 사용한다 -> 코드는 예뻤는데 배열 쓰는 것 보다 속도가 더 느리다고 한다. 그래도 예뻤다..