틀린 코드 - 시간 초과
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("실행");
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 자릿수 더하기 (0) | 2019.01.09 |
---|---|
프로그래머스 - 문자열 내림차순으로 배치하기 (0) | 2019.01.09 |
프로그래머스 - 약수의 합 (0) | 2019.01.09 |
프로그래머스 - 문자열 내 마음대로 정렬하기 (0) | 2019.01.09 |
프로그래머스 - 같은 숫자는 싫어 (0) | 2019.01.08 |