- 난이도: Lv1
프로그래머스 링크: https://school.programmers.co.kr/learn/courses/30/lessons/136798
풀이 링크(GitHub): hayannn/CodingTest_Java/프로그래머스/1/136798. 기사단원의 무기
풀이 시간 : 26분
1부터 number까지의 약수의 개수를 구해서 limit와 비교
별도 메서드 : 약수의 개수를 구하는 메서드
합성수 특징 이용 -> i가 제곱일일 때까지 반복하는 for문
import java.util.*;
class Solution {
public int solution(int number, int limit, int power) {
int answer = 0;
for (int i = 1; i <= number; i++) {
if (divisorCount(i) <= limit)
answer += divisorCount(i);
else
answer += power;
}
return answer;
}
//약수 개수 메서드
public int divisorCount(int number) {
int count = 0;
for (int i = 1; i * i <= number; i++) {
if (i * i == number){
count++;
}
if (number % i == 0) {
count += 2;
}
}
return count;
}
}
//before
public int divisorCount(int number) {
int count = 0;
for (int i = 1; i * i <= number; i++) {
if (i * i == number){
count++;
}
if (number % i == 0) {
count += 2;
}
}
return count;
}
}
//after
public int divisorCount(int number) {
int count = 0;
for (int i = 1; i * i <= number; i++) {
if (i * i == number){
count++;
}
else if (number % i == 0) {
count += 2;
}
}
return count;
}
}
풀이 시간 : 1시간 20분(첫 풀이 시간 포함)
import java.util.*;
class Solution {
public int solution(int number, int limit, int power) {
int answer = 0;
for (int i = 1; i <= number; i++) {
if (divisorCount(i) <= limit)
answer += divisorCount(i);
else
answer += power;
}
return answer;
}
//약수 개수 메서드
public int divisorCount(int number) {
int count = 0;
for (int i = 1; i * i <= number; i++) {
if (i * i == number){
count++;
}
else if (number % i == 0) {
count += 2;
}
}
return count;
}
}
import java.util.*;
class Solution {
public int solution(int number, int limit, int power) {
int answer = 0;
for(int i=1;i<=number;i++){
int cnt = 0;
for(int j=1;j*j<=i;j++){
if(j*j==i) cnt++;
else if(i%j==0) cnt+=2;
}
if(cnt>limit) cnt = power;
answer += cnt;
}
return answer;
}
}