✔ 기사단원의 무기
문제 분석하기
기사단원들마다의 약수를 구한 후, 약수의 개수가 제한수치보다 크다면 제한수치를 초과한 기사가 사용할 공격력을 더하도록 함
예) 25
1, 5, 25이므로 count = 0 + 2 + 1 = 3
손으로 풀어보기
- 1번부터 가장 큰 기사단원의 숫자까지에 대해 약수를 구하도록 함
- 약수의 개수가 제한수치보다 작다면 약수의 개수를 더하고,
그렇지 않다면 제한수치가 초과한 기사가 사용할 공격력을 더하도록 함 - 총 철의 무게를 반환
슈도코드 작성하기
number(기사단원의 수)
limit(공격력의 제한수치)
power(제한수치를 초과한 기사가 사용할 무기의 공격력)
answer(필요한 철의 무게)
for(i -> number만큼) {
count(약수의 개수)
for(j -> 1부터 number의 제곱근까지) {
if(j * j == i)
count 1 증가
else if(i % j == 0)
count 2 증가
}
if (count > limit)
answer += power
else
answer += count
}
answer 반환
코드 구현하기
/**
* 136798) 기사단원의_무기
*/
public class L064_136798 {
// number(기사단원의 수)
// limit(공격력의 제한수치)
// power(제한수치를 초과한 기사가 사용할 무기의 공격력)
public int solution(int number, int limit, int power) {
// answer(필요한 철의 무게)
int answer = 0;
for (int i = 1; i <= number; i++) {
// count(약수의 개수)
int count = 0;
// 1부터 number의 제곱근까지
for (int j = 1; j <= Math.sqrt(i); j++) {
if (j * j == i)
count += 1;
else if (i % j == 0)
count += 2;
}
// 약수의 개수가 제한수치보다 크다면
if (count > limit)
answer += power;
else
answer += count;
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L064_136798 solution = new L064_136798();
int number = 5;
int limit = 3;
int power = 2;
int result = solution.solution(number, limit, power);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[134240] 푸드 파이트 대회 (0) | 2023.12.12 |
---|---|
[135808] 과일 장수 (0) | 2023.12.11 |
[138477] 명예의 전당 (1) (0) | 2023.12.09 |
[140108] 문자열 나누기 (0) | 2023.12.08 |
[43164] 여행경로 (0) | 2023.12.05 |