반응형
`합성수찾기`
문제 설명
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
입출력 예 #1
- 10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다.
입출력 예 #1
- 15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.
java code
class Solution {
public int solution(int n) {
int answer = 0;
for (int i = 1; i <= n; i++) {
int cnt = 0;
for (int j = 1; j <=i ; j++) {
cnt += (i%j==0) ? 1:0;
}
answer += (cnt >= 3)? 1:0;
}
return answer;
}
}
반복문 안에서 cnt를 선언하는 경우, cnt 변수는 반복문이 실행될 때마다 초기화됩니다. 이는 i가 변할 때마다 cnt가 다시 0으로 초기화되므로, 이전 i의 결과가 현재 i의 결과에 영향을 미치지 않습니다. 이 경우, cnt 변수의 값은 반복문 실행 중에만 유지됩니다.
하지만, 반복문 밖에서 cnt를 선언하는 경우, cnt 변수는 반복문이 종료된 후에도 그 값을 유지합니다. 이는 i가 변하더라도 cnt 변수가 초기화되지 않기 때문입니다. 이 경우, cnt 변수의 값은 반복문 실행이 끝난 후에도 유지되므로, 반복문 실행 후에 cnt 변수의 값을 확인할 수 있습니다.
따라서, 이 문제에서 cnt 변수는 반복문 안에서 선언하는 것이 적절합니다. 왜냐하면 cnt 변수는 각각의 i 값에 대한 약수의 개수를 세는 것이 목적이기 때문에, 각각의 i 값에 대해 새로운 cnt 변수를 선언하여 해당 i 값에 대한 약수 개수를 계산하는 것이 적절합니다.
python code
def solution(n):
answer = 0
for i in range(1,n+1):
cnt = 0
for j in range(1,i+1):
if i%j==0: cnt += 1
if cnt >= 3:
answer +=1
return answer
반응형
'algorithm' 카테고리의 다른 글
[프로그래머스]모스부호 (1) - java, python (0) | 2023.03.10 |
---|---|
[프로그래머스]중복된 문자제거 - java, python (0) | 2023.03.10 |
[프로그래머스]문자열 정렬하기 (2) - java, python (0) | 2023.03.09 |
[프로그래머스]숫자 찾기 - java, python (0) | 2023.03.09 |
[프로그래머스]3 6 9 게임 (0) | 2023.03.09 |
댓글