#include <bits/stdc++.h>
using namespace std;
bool isprime(int a) {
if (a == 1) return 0;
for (int i = 2; i * i <= a; i++) {
if (a % i == 0) return 0;
}
return 1;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
int cnt = 0;
while (n--) {
int a;
cin >> a;
cnt += isprime(a);
}
cout << cnt;
}
소수를 구하는 문제풀이에서, 함수를 만드는 형태로 생각하지 않고, 모두 main 내부에 넣는 방법으로 생각했더니, 경우들을 나누어서 방향을 갈라가는걸 어떤식으로 표현해야하는지 떠오르지가 않아서, 시간을 굉장히 많이 소비하였다.
그래서 너무 생각이 안나서 일단 노션에 따로 다음에 다시 풀어볼 알고리즘 문제로 만들고, 그리고 과거에 풀어서 제출했던 풀이를 참고하였다.
이렇게 다시 보니 함수를 만들어두고, 그 함수를 main내부에서 활용하는것이 아주 깔끔하게 문제를 풀 수 있는 방법이라는걸 알게되었다. 함수를 만듦으로써, return을 통해서 경우들을 나눌 수 있고, 그걸 활용해서 간결하게 소수인지 판정할 수 있었다.
다음에 다시 이 문제를 풀어보고 이 풀이를 떠올려 보자. 그리고 i*i<=n에서 =도 같이 있어서 포함관계까지도 체크해보아야 정답이 된다는걸 기억하도록 하자.
=가 없이 제출하면 틀리게 된다.
+++++++++++++++++++++++++++++++++++
재귀를 사용하여서 팩토리알을 구현하는 방법과, 반복법을 사용하여서 팩토리알을 구현하는 방법에서의 시간복잡도 차이가 궁금하여서 실질적으로 코드를 제출해보고, 그리고 또 gpt에 질문도 해보았는데,
반복법으로 작성하여 제출한 코드도 재귀와 차이가 존재하지 않고,
gpt의 답변또한 모두 O(n)의 시간복잡도를 가진다고 나온다. 공간복잡도 측면에서 반복법이 조금 더 유리하다고는 하나, 큰 차이라기보다는 표현이 훨씬 간결하고 쉬운 리컬전이 훨씬 편한 방법이 될것 같다.

'알고리즘 > BOJ' 카테고리의 다른 글
| c++ 10989번 문제. 메모리 제한이 아주 작은 문제는 평소와 다른 방식을 원한다는걸 고려해보자. (0) | 2023.04.10 |
|---|---|
| boj 하노이탑 두가지 문제중 n=100인 경우를 출력하는 문제를 c++로 하결하는 경우. (0) | 2023.04.10 |
| c++에서 auto it= rbegin(s);의 활용 방법에 대하여. (0) | 2023.04.08 |
| 공백 문자를 포함하는 문자열을 받을때, getline(cin,s,'원하는 char') 형태를 기억하자. (0) | 2023.04.08 |
| c++에서 소수의 자릿수 표현에 대한 방법. (0) | 2023.04.08 |
