[프로그래머스/java] 합성수 찾기

2025. 8. 25. 10:48·코테/프로그래머스 JAVA Lv.0

 

 

🔗 합성수 찾기

 

 

문제 설명

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


제한사항
  • 1 ≤ n ≤ 100

입출력 예
n
result
10 5
15 8

입출력 예 설명

입출력 예 #1

  • 10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다.

입출력 예 #1

  • 15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.

 

 

 

문제 풀이

for문 돌리고 배열에 담아서 약수를 찾아야 할까 고민했는데 분명 내가 번거롭게 생각하고 있을 것이라는 확신이 들어 다시 생각해봤다.

초반에  int count = 0; 를 for문 바깥쪽에 둬서 count가 계속 증가해서 큰 수가 나왔다. 초기화 생각을 못 함;

 

👉 내가 쓴 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        // 1부터 n까지 순회하면서 각 숫자의 약수 개수를 확인
        for(int i = 1; i <= n; i++){ 
            int count = 0; // 현재 숫자 i의 약수 개수를 저장
            
            // 1부터 i까지 나눠서 i 약수 확인
            for(int j = 1; j <= i; j++){ 
                if(i % j == 0){ // 나머지가 0이면 약수
                    count++;
                } 
            }
            // 약수의 개수가 3개 이상이면 합성수이므로 answer 증가
            if(count >= 3){ 
                answer++;
            } 
        }
        return answer; // 합성수의 개수를 반환
    }
}

 

바깥쪽 for문을 통해 1 ~ n 까지의 수에 대해 반복.

안쪽 for문에서  i에 대해 1부터 j까지 나눠서 약수를 구하고 약수일 경우 count를 증가시킨다.

count가 3개 이상일 경우 answer를 증가시켜주고, 그렇지 않을 경우 다시 for문

 

 

👉 다른 사람 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=4; i<n+1; i++){
            if(i%2==0) {
                answer++; // 4이상 짝수는 전부 합성수
                continue;
            }
            else{
                for(int k=3; k<i/2; k=k+2){
                    if(i%k==0){
                        answer++;
                        break;
                    }
                }
            }
        }
        return answer;
    }
}

 

class Solution {
    public int solution(int n) {
        int answer = 0;

        for(int i = 4; i <= n; i++){
            for(int j = 2; j < i; j++){
                if(i % j == 0){
                    answer++;
                    break;
                }
            }
        }
        return answer;
    }
}

 

아예 i를 4부터 시작해서 푸는 방법도 있다.

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'코테 > 프로그래머스 JAVA Lv.0' 카테고리의 다른 글

[프로그래머스/java] 배열 회전시키기  (0) 2025.08.27
[프로그래머스/java] 외계행성의 나이  (0) 2025.08.26
[프로그래머스/java] 콜라츠 수열 만들기  (0) 2025.07.17
[프로그래머스/java/Lv.0] 접미사 배열  (0) 2025.06.01
[프로그래머스/java/Lv.0] 369게임  (0) 2025.05.27
'코테/프로그래머스 JAVA Lv.0' 카테고리의 다른 글
  • [프로그래머스/java] 배열 회전시키기
  • [프로그래머스/java] 외계행성의 나이
  • [프로그래머스/java] 콜라츠 수열 만들기
  • [프로그래머스/java/Lv.0] 접미사 배열
amying
amying
공부해보겠슨
  • amying
    꽁꽁 얼어붙은 자바 위를 자박자박
    amying
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (332)
      • 공부 (55)
        • JAVA (17)
        • Spring (17)
        • Java Script (1)
        • React (0)
        • SQL (3)
        • DB (1)
        • CS (13)
        • 기술면접 (3)
      • Git (2)
      • 강의 (36)
        • 부스트코스: Connect On: 테크와 나를 잇.. (16)
        • 부스트코스: CS50 (20)
      • 네이버 부스트캠프 베이직 (25. 06) (0)
      • 에러 (10)
      • 코테 (205)
        • 백준 (29)
        • 프로그래머스 JAVA Lv.0 (116)
        • 프로그래머스 JAVA Lv.1 (7)
        • 프로그래머스 SQL (53)
      • 개인 프로젝트 (16)
        • 책첵 CHAEKCHECK (2)
        • 일정 관리 서비스 만들기 (0)
        • 게시판 만들기 (eclipse-JSP) (14)
      • 이것저것 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오라클에러
    부스트코스강의
    springbot
    ORACLE에러
    에러
    업무자동화
    데이터연동
    책첵개발일지
    코테
    프로그래머스
    부스트코스
    CS50
    lombok
    git명령어
    Java
    코딩테스트_입문
    알고리즘
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
amying
[프로그래머스/java] 합성수 찾기
상단으로

티스토리툴바