![[BOJ] 백준_1978번_소수 찾기 / C++](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FblXsg1%2FbtrevH7FlgN%2FAAAAAAAAAAAAAAAAAAAAAKPiYwR7hF4GHc6wSOpH58C7_tWCp2XtJJ9JY8jj9b11%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DhUCtcfhhhF7Snchk%252FtAqAc5ZAIA%253D)
[BOJ] 백준_1978번_소수 찾기 / C++백준 알고리즘2021. 9. 9. 10:02
목차
문제 출처
https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
코드
//[BOJ] 1978번_소수 찾기
#include <iostream>
using namespace std;
int main()
{
int i, j, N;
int num;
int tot=0;
cin >> N;
while (N)
{
cin >> num;
if (num == 1) {
goto pass;
}
else if (num == 2) {
tot++;
goto pass;
}
for (j = 2; j < num; j++)
{
if ((num % j == 0))
break;
else if (j == num - 1) {
tot++;
break;
}
}
pass:
N--;
}
cout << tot << endl;
return 0;
}
변수 N으로 입력받을 수의 개수가 정해지고, 변수 num은 각 숫자들을 저장한다. 변수 tot은 각각의 num들이 소수인지 아닌지 판단했을때 소수이면 1이 증가함으로써 소수의 개수를 저장한다. 소수 여부를 판단하는 반복문으로 j가 2부터 시작해서 num보다 1 작을 때까지 num을 j로 나눈 나머지가 0이 아니라면 tot을 1 증가시키는 구조로 작성했다. 그런데 num이 1일 경우와 2일 경우는 해당 반복문 조건에 해당하지 않는 경우여서 따로 if - else if 문으로 빼서 작성하였다. num이 1일 경우 1은 소수가 아니기에 goto pass;를 통해 N--; 바로 직전으로 이동하고 while(N) 반복문 1턴을 소모한다. 2일 경우 2는 소수이기 때문에 바로 tot을 1 증가시키고 반복문 1턴을 소모한다. 처음에 goto 문을 생각하지 못해 continue를 이용해서 작성했었는데 그렇게 작성하면 턴 감소가 되지 않은 채 반복문 처음으로 돌아가기 때문에 적절한 tot 값을 구할 수 없었다.
728x90
반응형
'백준 알고리즘' 카테고리의 다른 글
[BOJ] 백준_10872번_팩토리얼 / C++ (0) | 2021.09.12 |
---|---|
[BOJ] 백준_1929번_소수 구하기 / C언어, C++ (0) | 2021.09.10 |
[BOJ] 백준_11653번_소인수분해 / C++ (0) | 2021.09.08 |
[BOJ] 백준_10808번_알파벳 개수 / C언어 (0) | 2021.09.07 |
[BOJ] 백준_10820번_문자열 분석 / C++ (0) | 2021.09.06 |
@kdj :: Childev'note
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!