2023. 9. 21. 11:24, 알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/120846
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for(int i=1; i<=n; i++){
int cnt=0;
for(int j=1; j<=n; j++){
if(i%j==0) cnt++;
}
if(cnt>=3) answer++;
}
return answer;
}
위가 내가 작성한 풀이이고,
이 문제를 풀고 나서 다른 사람의 풀이를 보니까, 합성수가 가지는 특성상, 1, 2, 3 은 절대 합성수가 될 수 없기 때문에, 판별할때 그 수들에 대해서는 위와 같은 for문을 돌릴 필요가 없다는걸 알 수 있었다. 그와 같은 해당 풀이를 첨부해 보자면,
#include <string>
#include <vector>
using namespace std;
bool isComposite(int n)
{
int cnt = 0;
for(int i = 1; i<=n; i++){
if(n % i == 0)
cnt++;
if(cnt >= 3)
return true;
}
return false;
}
int solution(int n) {
int answer = 0;
for(int i = 4; i<=n; i++){
if(isComposite(i))
answer++;
}
return answer;
}
이와 같았다. solution 함수에서 int i=4 부터로 시작되는 것을 통해 알 수 있다.
물론 연산 차이에서는 아주 큰 차이가 발생하는 것은 아니지만, (1과 2와 3 의 딱 세가지 경우만 내 코드에서는 추가적으로 체크해볼테니) 그래도 이와 같이 경우를 확실하게 구분하고 불필요한 것은 코드에서 첨부하지 않도록 하는 설계를 하도록 하자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 팩토리얼 (0) | 2023.09.21 |
---|---|
Lv 0. 최댓값 만들기(1) (0) | 2023.09.21 |
Lv 0. 주사위의 개수 (0) | 2023.09.21 |
Lv 0. 배열 회전시키기 - deque를 쓸려면 <deque> 헤더를 추가하자. 시퀀스 컨테이너에서 rotate() 함수 사용법 (0) | 2023.09.20 |
Lv 0. 공 던지기 (0) | 2023.09.20 |
Comments, Trackbacks