

* 문제 풀이
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(n % i == 0)
if(n / i == j){
answer++;
}
}
}
return answer;
}
}
~> 오답!
처음에 if(n % i == 0) 작성을 안 했더니 결과값이 다르게 출력됐다. if(n / i == j)에서 결과값이 소수점(ex. 5 / 2 = 2.5)이 나올 수 있기 때문에 잘못된 결과가 출력된 듯.
약수인걸 먼저 확인한 후 다음 코드 실행.
실행 결과는 성공으로 뜨는데 답 제출하면 제한 사항이 1 ≤ n ≤ 1,000,000라 그런가 시간초과로 에러 뜬다.
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = 1; i <= n; i++){
if(n % i == 0){
answer++;
}
}
return answer;
}
}

쉬운 방법이 있었다;
왜 복잡하게 꼬아서 생각하는지 모르겠네~
* 다른 풀이
class Solution {
public int solution(int n) {
int answer = 0;
for (int i = 1; i <= n; i++) { // i는 1부터 n까지
for (int j = 1; j <= n; j++) { // j는 1부터 n까지
if (n % i == 0 && n / i == j) { // 약수 조건 확인
answer++;
break; // j에 대해 더 이상 확인하지 않음
}
}
}
return answer;
}
}
처음 했던 방법 처럼 하려면 break;를 걸어줘야 함.
class Solution {
public int solution(int n) {
int answer = 0;
// 1부터 n의 절반까지만 확인 (i * j 형태의 약수 쌍을 직접 계산)
for (int i = 1; i * i <= n; i++) { // i * i <= n으로 루프 제한
if (n % i == 0) { // i가 n의 약수라면
answer++; // i는 약수
if (i != n / i) { // i와 n / i가 다르면
answer++; // n / i도 약수
}
}
}
return answer;
}
}
'코테 > 프로그래머스 JAVA Lv.0' 카테고리의 다른 글
| [프로그래머스/java/Lv.0] 직각삼각형 출력하기 (0) | 2025.01.06 |
|---|---|
| [프로그래머스/java/Lv.0] 길이에 따른 연산 (0) | 2025.01.04 |
| [프로그래머스/java/Lv.0] 조건에 맞게 수열 변환하기 1 (1) | 2025.01.02 |
| [프로그래머스/java/Lv.0] 홀짝 구분하기 (0) | 2024.12.30 |
| [프로그래머스/java/Lv.0] 배열에서 문자열 대소문자 변환하기 (1) | 2024.12.27 |