반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
첫 번째 풀이
function solution(n) {
let answer = 1;
for(let i = 3; i <= n; i++){
let flag = true;
for(let j = 2; j < i; j++) {
if(i % j === 0) flag = false;
}
if(flag) answer++;
}
return answer;
}
간단하게 생각하고 풀었다.
n은 2 이상이니까 무조건 2는 포함한다 생각하고 answer = 1로 두고, i는 3부터 시작하도록 했다.
flag를 세워서 2~i까지 수 중에서 나눠지는게 있으면 false로 두도록했다.
하나라도 false라도 for문을 끝까지 다 도는게 맘에 걸리긴 했지만 일단 돌려봤다.
결과는… 효율성 똥망
테케 10, 11, 12 실패, 효율성 테스트 올실패 (그럴 수 밖에)
두 번째 풀이
근데 생각해보니까 모든 숫자를 다 돌릴 필요가 없다고 생각했다.
빈 배열에 소수가 등장할 때마다 소수를 집어넣고,
값을 배열에 있는 소수로 나눴을 때 안나뉘면 그 값이 또 소수 아닌가?
그리고 마지막엔 배열의 길이를 리턴하면 됨.
…
라는 아이디어로 일단 코드를 다시 짜봤음.
function solution(n) {
const arr = [2];
for(let i = 3; i <= n; i++) {
let flag = true;
for(let j = 0; j < arr.length; j++){
if(i % arr[j] === 0) {
flag = false;
break;
}
}
if(flag) arr.push(i)
}
return arr.length;
}
정확성은 이제 됐는데, 효율성은 아직도 시간 초과다.
( 풀이 중. ㄴㅐ일 풀거양)
반응형
'CS > 알고리즘' 카테고리의 다른 글
[230422] 소수 찾기 (0) | 2023.04.22 |
---|---|
[230422] 추억 점수 (0) | 2023.04.22 |
[230421] 모의고사 (0) | 2023.04.21 |
[230421] n^2 배열 자르기 (0) | 2023.04.21 |
[230421] 위장 (0) | 2023.04.21 |