본문 바로가기

프로그래머스

프로그래머스 - 소수 찾기

틀린 코드 - 시간 초과

class Solution {
public int solution(int n) {
int answer = 0;

for (int i = 1; i <= n; i++) {
int sosuCnt = 0;

f2: for (int j = 1; j <= i; j++) {
if (i % j == 0) {
sosuCnt++;
}
}

if (sosuCnt == 2) {
answer++;
}
}

return answer;
}
}


다른 사람 코드 - n = 2일 때 분기 미리 체크, 해당 수의 제곱근까지만 검사하면 된다. (해당 수, 해당 수 / 2가 아니라)

class Solution {
public int solution(int n) {
/**
* i = 2일 때 미리 체크
*/
int answer = 1;

outer:
for (int i = 3; i <= n; i++) {

/**
* 해당 수 제곱근까지만 검사하면 됨 - Math.sqrt()
*/
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0)
continue outer;
}
answer++;
}

return answer;
}
}



추가로

이중 for문에서 continue, break의 미미한 차이도 다시 보게 되었다.

outer:
for (int i = 0; i < 10; i++) {

inner:
for (int j = 0; j < 10; j++) {
if (j == 5) {
continue outer;

/**
* 아래와 같이 작성하면
* 아래 System.out.println("실행"); 부분이 무조건 실행
*/

break inner;
}
}

System.out.println("실행");
}