Problem Solving

[Java] 백준 1978. 소수 찾기

2023. 2. 28. 02:14
목차
  1. 문제
  2. 입력
  3. 출력
  4. 예제 입력
  5. 예제 출력
  6. 풀이
  7. 코드(1번)
  8. 코드(2번)
728x90

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력

4
1 3 5 7

예제 출력

3

풀이

1. 판별해야 할 수를 N이라고 할 때 N%1 N%2 … N%(N-1) 확인하기

아무 생각 없이 썼던 방법으로 굉장히 비효율적이다.

그 이유는 2번에서 설명하겠다.

 

2. N의 제곱근까지 확인하기

서칭하기 전까지 이런 방법이 있다고 생각도 못 했다. 역시 나이가 들면서 머리도 굳는건가 ㅠ ㅠ

N = A*B라고 할 때, A나 B 둘 중 하나는 무조건 N과 같거나 작기 때문에 N의 제곱근까지만 확인해보면 소수인지 판별이 가능하다.

예를 들어 N = 29라고 하면 제곱근은 5.xx이다.

2, 3, 4, 5의 배수인지만 확인하면 된다는 뜻이다.

코드(1번)

124 ms, 14080 KB

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int count = 0;

        for(int i=0; i<N; i++) {
            int num = Integer.parseInt(st.nextToken());
            int result = 0;
            if(num==1) continue;
            if(num==2) {
                count++;
                continue;
            }
            for(int j=2; j<num; j++) {
                if(num%j==0) result = 1;
            }
            if(result==0) count++;
        }

        System.out.println(count);
    }
}

코드(2번)

128 ms, 14140 KB

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int count = 0;

        for(int i=0; i<N; i++) {
            int num = Integer.parseInt(st.nextToken());
            if(isPrime(num)==true) count++;
        }

        System.out.println(count);
    }

    static boolean isPrime(int num) {
        if(num==1) return false;
        if(num==2||num==3) return true;
        for(int i=2; i<=Math.sqrt(num); i++) {
            if(num%i==0) return false;
        }
        return true;
    }
}
728x90
반응형
저작자표시 (새창열림)

'Problem Solving' 카테고리의 다른 글

[Java] 백준 9020. 골드바흐의 추측  (0) 2023.03.07
[Java] 백준 25206. 너의 평점은  (0) 2023.03.07
[Java] 백준 10250. ACM 호텔  (0) 2023.02.24
[Java] 백준 2839. 설탕 배달  (0) 2023.02.24
[Java] SW Expert. 백만 장자 프로젝트  (0) 2023.02.21
  1. 문제
  2. 입력
  3. 출력
  4. 예제 입력
  5. 예제 출력
  6. 풀이
  7. 코드(1번)
  8. 코드(2번)
'Problem Solving' 카테고리의 다른 글
  • [Java] 백준 9020. 골드바흐의 추측
  • [Java] 백준 25206. 너의 평점은
  • [Java] 백준 10250. ACM 호텔
  • [Java] 백준 2839. 설탕 배달
조화이트
조화이트
반응형
조화이트
백엔드 공부 기록
조화이트
전체
오늘
어제
  • 분류 전체보기 (69)
    • CodeStates_BE_44 (30)
      • TIL (21)
      • 월간 회고 (1)
      • 과제 (6)
      • 코플릿 (2)
    • Problem Solving (23)
      • Study (4)
    • Reading (9)
      • 자바의 정석 (2)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (7)
    • CS (6)
      • Data Structure (3)
      • Algorithm (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.
조화이트
[Java] 백준 1978. 소수 찾기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.