티스토리 뷰
2022.11.23
프로그래머스 스쿨 Lv01. 기사단원의 무기
🚀 문제 파악
* 1 ~ number 까지의 기사 번호
* 기사 번호의 약수 개수 = 구매 가능한 무기의 공격력 (예) 기사번호 = 3 / 약수는 2개(1,3) / 공격력은 2
* 무기 공격력 제한 수치 >= 구매 가능한 무기 공격력 인 경우 문제없이 무기 구매 가능
* 무기 공격력 제한 수치 < 구매 가능한 무기 공격력 인 경우 지정 공격력의 무기를 구매해야 함
* 무기 공격력 제한 수치는 limit
* 지정 공격력은 power
* 공격력 1마다 1kg의 철 필요
* 모든 기사단원의 무기를 위한 철의 무게는?
🚀 문제 해결
1. 먼저 공격력에 해당하는 약수의 개수를 구한다.
* 약수의 개수를 구하는 방법은 소수를 구할 때 사용한 제곱근 방식에서 착안
* 나누는 수와 몫이 같은 경우는 약수 개수 +1 (예) 4 /2 = 2 인 경우, 알 수 있는 약수는 2 하나
* 나누는 수와 몫이 다른 경우는 약수 개수 +2 (예) 6 /2 = 3 인 경우, 알 수 있는 약수는 2,3 총 2개
* [참고. 소수를 구하는 방법(2) 제곱근의 이용] https://dev-ku.tistory.com/278
2. 제한 수치(limit) 와 비교, 구매 가능한 공격력의 무기 확인
3. 모든 기사의 공격력을 answer에 더하고 최종 반환
🚀 통과 코드
function solution(number, limit, power) {
var answer = 0;
for(var i = 1; i <= number; i++) {
// 약수 개수 구하기 위해 제곱근 구하기
var sqrt = Math.round(Math.sqrt(i));
var attack = 0; // 권장 공격력 = 약수 개수
// 약수 개수 구하기 = 공격력 구하기
for(var j = 1; j <= sqrt; j++){
if(i%j == 0){
if(i/j==j) attack+=1; // 약수 1개 (예) 4/2=2, 2
else attack+=2; // 약수 2개 (예) 6/2=3, 2와 3
}
}
// 제한 수치 적합 확인
if(limit >= attack) answer += attack
else answer += power
}
return answer;
}
'🔥 해보자고 🔥' 카테고리의 다른 글
프로그래머스 스쿨 Lv01. 성격유형검사하기 (0) | 2022.11.30 |
---|---|
프로그래머스 스쿨 Lv01. 햄버거 만들기 (0) | 2022.11.29 |
프로그래머스 스쿨 Lv01. 명예의 전당(1) (0) | 2022.11.28 |
프로그래머스 스쿨 Lv01. 푸드 파이트 대회 (0) | 2022.11.25 |
프로그래머스 스쿨 Lv01. 과일 장수 (0) | 2022.11.24 |
댓글