<문제 제시>
<문제설명>
약수의 개수가 세 개 이상인 수를 합성수라고 합니다.
자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

<예시 입출력>

<문제 해결 과정>
먼저 합성수의 개념을 알고, 약수를 찾는 로직을 작성해야했다.
Try 1)
public static int solution(int n) {
int answer = 0;
List<Integer> temp = new ArrayList<>();
int k = 0;
int cnt = 0;
// 테스트케이스
//
// i = 1, n = 10
// if(n % i == 0){
// i = {1, 2, 5, 10}
// 1부터 ~ n까지 반복하면서
for(int i = 2; i <= n; i++){
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
temp.add(k, j);
k++;
}
if(k >= 3) {
answer++;
temp.clear();
k = 0;
}
}
}
return answer;
}
주어진 수 n까지 반복하면서 0,1을 제외한 2부터 시작하는 반복문을 작성해보았다.
k를 통해 리스트의 인덱스를 직접 다루고, i % j == 0 인 값을 리스트에 추가해주었다.
만약 약수의 개수가 3개이상이되면 합성수이므로 answer값을 증가시키고 리스트를 다시 초기화 시켜주었다.
하지만 세부적인 로직이 부족하여 오답이었다.
>> 약수찾기 로직을 활용해 풀어보고자 하였지만 잘 되지 않았던 첫시도였다.
// 약수 찾기
if(n % i == 0) {
temp.add(k, i);
k++;
System.out.println("temp_list = " + temp);
}
Solution 1)
약수찾기 로직을 활용하여, 이중 반복문 안에 break문도 추가하였다.
<전체코드>
public class composite_number {
public static int solution(int n) {
int answer = 0;
int i,j;
for(i = 2; i <= n; i++){
for(j = 2; j < i ; j++) {
if(i % j == 0) {
answer++;
break;
}
}
}
return answer;
}
public static void main(String[] args) {
int n = 10;
System.out.println(solution(n));
}
}
break문을 통해 불필요한 인덱스 선언이나 리스트 선언, 리스트 초기화 부분을 없앨 수 있었다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120846
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '모음 제거' - Java (0) | 2023.05.03 |
---|---|
[프로그래머스] '약수 구하기' - Java (1) | 2023.05.02 |
[프로그래머스] '영어가 싫어요' - Java (0) | 2023.05.01 |
[프로그래머스] '팩토리얼' - Java (0) | 2023.05.01 |
[프로그래머스] '주사위의 개수' - Java (0) | 2023.04.30 |
<문제 제시>
<문제설명>
약수의 개수가 세 개 이상인 수를 합성수라고 합니다.
자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

<예시 입출력>

<문제 해결 과정>
먼저 합성수의 개념을 알고, 약수를 찾는 로직을 작성해야했다.
Try 1)
public static int solution(int n) {
int answer = 0;
List<Integer> temp = new ArrayList<>();
int k = 0;
int cnt = 0;
// 테스트케이스
//
// i = 1, n = 10
// if(n % i == 0){
// i = {1, 2, 5, 10}
// 1부터 ~ n까지 반복하면서
for(int i = 2; i <= n; i++){
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
temp.add(k, j);
k++;
}
if(k >= 3) {
answer++;
temp.clear();
k = 0;
}
}
}
return answer;
}
주어진 수 n까지 반복하면서 0,1을 제외한 2부터 시작하는 반복문을 작성해보았다.
k를 통해 리스트의 인덱스를 직접 다루고, i % j == 0 인 값을 리스트에 추가해주었다.
만약 약수의 개수가 3개이상이되면 합성수이므로 answer값을 증가시키고 리스트를 다시 초기화 시켜주었다.
하지만 세부적인 로직이 부족하여 오답이었다.
>> 약수찾기 로직을 활용해 풀어보고자 하였지만 잘 되지 않았던 첫시도였다.
// 약수 찾기
if(n % i == 0) {
temp.add(k, i);
k++;
System.out.println("temp_list = " + temp);
}
Solution 1)
약수찾기 로직을 활용하여, 이중 반복문 안에 break문도 추가하였다.
<전체코드>
public class composite_number {
public static int solution(int n) {
int answer = 0;
int i,j;
for(i = 2; i <= n; i++){
for(j = 2; j < i ; j++) {
if(i % j == 0) {
answer++;
break;
}
}
}
return answer;
}
public static void main(String[] args) {
int n = 10;
System.out.println(solution(n));
}
}
break문을 통해 불필요한 인덱스 선언이나 리스트 선언, 리스트 초기화 부분을 없앨 수 있었다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120846
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '모음 제거' - Java (0) | 2023.05.03 |
---|---|
[프로그래머스] '약수 구하기' - Java (1) | 2023.05.02 |
[프로그래머스] '영어가 싫어요' - Java (0) | 2023.05.01 |
[프로그래머스] '팩토리얼' - Java (0) | 2023.05.01 |
[프로그래머스] '주사위의 개수' - Java (0) | 2023.04.30 |