https://school.programmers.co.kr/learn/courses/30/lessons/136798
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
무기점의 주인이 무기를 모두 만들기 위해 필요한 철의 무게를 구하라 - 주어진 자료는 무엇인가?
number: 기사 단원의 수를 나타내는 정수
limit: 공격력의 제한 수치를 나타내는 정수
power: 제한 수치를 초과한 기사가 사용할 무기의 공격력을 나타내는 정수 - 조건은 무엇인가?
이웃나라와의 협약에 의해 공격력의 제한수치를 정하고, 제한수치보다 큰 공격력을 가진 무기를 구매해야 하는 기사는 협약기관에서 정한 공격력을 가지는 무기를 구매해야 합니다.
1 ≤ number ≤ 100,000
2 ≤ limit ≤ 100
1 ≤ power ≤ limit
2. 계획
- 공격력 = 자신의 기사 번호의 약수 개수
- 철의 무게 = 공격력1당 1kg = 공격력kg
- 1부터 number까지의 약수의 개수를 구한다.
- 각 수가 power보다 높으면 power 값으로 대체한다.
- 총 합계를 구한다.
3. 실행
const solution = (number, limit, power) => {
let submultiple = getSubMultiple(number);
const weight = submultiple.map((it) => {
if (it <= limit) {
return it
} else {
return power
}
})
return weight.reduce((acc, cur) => acc + cur, 0);
};
const getSubMultiple = (number) => {
let submultipleCount = [];
while (number >= 0) {
let submultiple = [];
for (i = 1; i <= Math.sqrt(number); i++) {
if (number % i === 0) {
submultiple.push(i);
if (number / i !== i) {
submultiple.push(number / i)
}
}
}
submultipleCount.push(submultiple.length);
number -= 1;
}
return submultipleCount;
}
4. 반성
- 문제를 다른 방식으로 해결할 수 있는가?
재귀로 풀어보았으나 일부 테스트 케이스에서는 시간초과가 난다.
시간초과가나면 빅오 관점에서 개선할 방법을 생각해봐야겠다.
const solution = (number, limit, power) => {
let submultiple = getSubMultiple(number);
const weight = submultiple.map((it) => {
if (it <= limit) {
return it
} else {
return power
}
})
return weight.reduce((acc, cur) => acc + cur, 0);
};
const getSubMultiple = (number, submultipleCount = []) => {
let submultiple = [];
if (number === 0) {
return submultipleCount
};
for (i = 1; i <= Math.sqrt(number); i++) {
if (number % i === 0) {
submultiple.push(i);
if (number / i !== i) {
submultiple.push(number / i)
}
}
}
submultipleCount.push(submultiple.length)
return getSubMultiple(number -= 1, submultipleCount);
};
'코테연습' 카테고리의 다른 글
183. 개인정보 수집 유효기간 Javascript (0) | 2023.02.10 |
---|---|
182. 삼총사 Javascript (0) | 2023.02.10 |
180. 크기가 작은 부분 문자열 Javascript (0) | 2023.01.20 |
179. 옹알이 Javascript (0) | 2023.01.20 |
178. 햄버거 만들기 Javascript (0) | 2023.01.20 |
댓글