[백준] 1978번 : 소수 찾기 (C++)

2024. 2. 21. 22:55·Programming/C++ - 백준
반응형


문제


풀이

int 변수 N, num, decimal(소수의 개수), count(0이라면 소수X, 아니라면 소수O)를 선언했다.

소수는 1과 자기자신으로 나누었을 때만 나머지가 0이 된다.

반대로, 소수가 아닌 경우에는 1과 자기 자신 사이의 수로 나누면 나머지가 0이 되는 것을 이용했다.

 

아래의 코드와 같이, 소수가 아니라면 count++를 하였다. for문을 빠져나왔을 때 count == 0이라면 소수이므로 소수의 개수를 의미하는 변수인 decimal을 증가시켰다.

 

예를 들어, num = 9, j = 3이라면, 9 % 3 = 0이다. 이는 소수가 아니므로 count를 증가시킨다.

for문을 빠져나오면 count == 0인지 확인하는 if문을 통해, 소수라면 변수 decimal을 증가시킨다.

 

for (int j = 2; j < num; j++) {			
	if (num % j == 0) {					
		count++;
	}
}
if (count == 0) {	// count == 0인 소수만 decimal++
	decimal++;
}
count = 0;	//  count = 0으로 다시 초기화하기

 

주의해야할 점은 1은 소수가 아니고, 2는 소수인 점이다.

 

위처럼 for문을 사용할 때 2부터 num - 1까지의 숫자로 나누었다.

이 때문에, 1과 2는 for문을 통해 소수 여부가 구해지지 않아 if문을 이용하여 1은 소수가 아니니 count++를 하고, 2는 소수이므로 바로 decimal++을 해주었다.

 

for (int i = 0; i < N; i++) {
	cin >> num;

	if (num == 2) {	// 2는 소수
		decimal++;
	}
	else {
		if (num == 1) {	// 1은 소수가 아님!
			count++;
		}
		for (int j = 2; j < num; j++) {	// 소수X: num을 '2부터 num-1'으로 나눈 나머지가 0이라면 count++
			if (num % j == 0) {	// ex) num = 9, j = 3, 9 % 3 = 0 / 소수가 아니므로 count++
				count++;
			}
		}
		if (count == 0) {		// count == 0인 소수만 decimal++
			decimal++;
		}
		count = 0;				//  count = 0으로 다시 초기화하기
	}
}

 


코드

#include <iostream>
using namespace std;

int main() {
	int N, num, decimal=0, count=0;

	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> num;

		if (num == 2) {		// 2는 소수
			decimal++;
		}
		else {
			if (num == 1) {		// 1은 소수가 아님!
				count++;
			}
			for (int j = 2; j < num; j++) {			
				if (num % j == 0) {					
					count++;
				}
			}
			if (count == 0) {	// count == 0인 소수만 decimal++
				decimal++;
			}
			count = 0;			//  count = 0으로 다시 초기화하기
		}
	}

	cout << decimal;			// decimal 출력

	return 0;
}

결과

 

 
반응형
저작자표시 (새창열림)

'Programming > C++ - 백준' 카테고리의 다른 글

[백준] 5597번 : 과제 안 내신 분..? (C++)  (0) 2024.03.05
[백준] 7568번 : 덩치 (C++) + pair 클래스  (0) 2024.03.03
[백준] 2751번 : 수 정렬하기 2 (C++) + 시간초과 & 런타임 에러(OutofBounds) 해결  (2) 2024.02.21
[백준] 10250번 : ACM 호텔 (C++) + 반례 및 그림 설명  (2) 2024.02.20
[백준] 27866번 : 문자와 문자열 (C++)  (0) 2024.02.20
'Programming/C++ - 백준' 카테고리의 다른 글
  • [백준] 5597번 : 과제 안 내신 분..? (C++)
  • [백준] 7568번 : 덩치 (C++) + pair 클래스
  • [백준] 2751번 : 수 정렬하기 2 (C++) + 시간초과 & 런타임 에러(OutofBounds) 해결
  • [백준] 10250번 : ACM 호텔 (C++) + 반례 및 그림 설명
지구코드
지구코드
IT를 공부하고 있는 지구의 코딩공간입니다!
  • 지구코드
    지구의 코딩공간
    지구코드
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 개발 기록
      • Back-end
        • Spring
        • Django
      • Programming
        • 알고리즘
        • C++ - 백준
      • Cloud
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    프디아
    k디지털트레이닝
    백준
    Cloud
    AWS
    C++
    큐
    EC2
    알파코
    신한투자증권
    프로디지털아카데미
    부트캠프
    별 찍기
    알파코캠퍼스
    pair 클래스
    구조체 벡터
    부분 문자열 추출
    다이내믹 프로그래밍
    슬라이딩윈도우
    피보나치 수
    이진탐색
    시간초과
    edgelocation
    awscloudclubs
    KDT교육
    dp
    binary_search
    시간복잡도
    정렬
    fill 함수
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
지구코드
[백준] 1978번 : 소수 찾기 (C++)
상단으로

티스토리툴바