728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[소스코드]
#include <stdio.h>
int solution(int number, int limit, int power) {
int answer = 1;
for(int i=2;i<=number;i++){
int count=0;
for(int j=1;j*j<i;j++){
if(i%j==0)
count+=2;
if((j+1)*(j+1)==i)
count+=1;
if(count>limit){
answer+=power;
break;}
}
if(count<=limit)
answer+=count;
}
return answer;
}
[풀이]
약수를 구하는 문제에서 변형된 문제다.
값을 구하는건 쉬우나 시간 초과가 뜨는게 문제다.
반복문의 범위를 줄여줘야 하는데,
예를 들어 10의 약수 1,2,5,10 이라면 1과 2로 나눈 값 5,10의 개수도 저장을 해준다. 이러면 시간은 대폭 줄일수있다. j*j<i로 잡아주면 되는데 주의할 점은
1은 포함이 안되서 answer에 1을 더해주고 시작한다.
if((j+1)*(j+1)==i)는 9로 예를 들면 1,3,9 즉
3으로 나누면 약수의 개수는 1개기 때문에 조건문을 추가 했다.
'프로그래머스' 카테고리의 다른 글
[C언어/프로그래머스]옹알이(2) (0) | 2022.11.18 |
---|---|
[C언어/프로그래머스]옹알이(1) (0) | 2022.11.16 |
[C언어/프로그래머스]캐릭터의 좌표 (0) | 2022.11.14 |
[C언어/프로그래머스 레벨0]-로그인 성공? (0) | 2022.11.13 |
[C언어/프로그래머스 레벨0]-최빈값 구하기 (0) | 2022.11.13 |