프로그래머스 코딩테스트 연습 입문단계 '합성수 찾기' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120846
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓문제 설명
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
아래 입출력 예시
⚠️ 제한 사항 및 입출력 예시
- 1 ≤ n ≤ 100
입력 (n)
10
출력 (return 값)
5
✏️ 직접 구현한 코드
class Solution {
public int solution(int n) {
int count = 0;
int res_count = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= i; j++) {
if(i%j==0)
count++;
}
if(count >= 3)
res_count++;
count = 0;
}
return res_count;
}
}
🗣️ 코드 설명
- 숫자의 약수의 개수를 담을 count와 합성수의 개수를 담을 res_count를 생성합니다.
- 이중for문을 이용해 n까지의 모든 숫자들의 약수의 개수를 구할 수 있게됩니다. count에 약수의 개수를 담은 뒤, 안에있는 for문을 나오면 count의 값(약수의 개수)이 3이상이면 res_count의 값에 1을 더합니다. 이런식으로 합성수의 개수를 구하고 count를 다시 0으로 초기화한 뒤 그 다음 숫자의 약수를 담을 수 있도록합니다.
💦 어려웠던 점 + 시간이 지체되었던 부분
정답을 맞추기 전에 계속 결과가 1씩 크게 나왔었는데, 그 까닭은 마지막 if문에서 2가 아니면 res_count의 값에 1을 더하도록 했기 때문입니다. 이런 식의 코드이면 1은 합성수가 아닌데 1일 때도 res_count에 1을 더하게 되는 것이죠.
class Solution {
public int solution(int n) {
int count = 0;
int res_count = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= i; j++) {
if(i%j==0)
count++;
}
if(count != 2)
res_count++;
count = 0;
}
return res_count;
}
}
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 프로그래머스 - k의 개수 (1) | 2023.02.28 |
---|---|
[JAVA] 학교 수행평가 코딩테스트 - 2차원 배열을 활용한 성적 처리 프로그램 (0) | 2023.02.27 |
[JAVA] 프로그래머스 - 직각삼각형 출력하기 (0) | 2023.02.24 |
[JAVA] 프로그래머스 - 주사위의 개수 (0) | 2023.02.23 |
[JAVA] 프로그래머스 - 배열 원소의 길이 (0) | 2023.02.20 |