Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- solved.ac플래티넘
- 5강클로저
- 정렬
- [pccp 기출문제]
- 코어자바스크립트
- 스택
- Lv3
- div2개
- 백준알고리즘
- 타겟넘버
- solved.ac골드
- 알고리즘 문제풀이
- JS
- 비트마스크
- 최소스패닝트리
- pccp기출문제
- React.StrictMode
- Lv2
- 2023카카오블라인드코테
- 백준 알고리즘
- 우박수열정적분
- 지도 여러개
- DP
- 두원사이의정수쌍
- 과제진행하기
- 이중지도
- c++
- 알고리즘문제풀이
- JS스터디
Archives
- Today
- Total
호지
[프로그래머스] 기사단원의 무기 문제풀이 JS 본문
1-number까지 약수의 개수를 모두 구해서 더하는데
약수의 개수가 limit를 넘어갔을 때는 해당 위치의 약수의 개수는 power로 계산하면 되는 문제이다.
처음에는 단순히 다 순회를 했을 때는 시간 초과가 나온다.
여기서 시간을 줄여줄 수 있는 방법은
전체를 순회하는게 아니라 제곱이 n이되는 수까지만 확인을 하는 것이다.
이렇게 되면
n=1, i가 1로 1증가
n=2, i가 1로 2증가
n=3, i가 1로 2증가
n=4, i가 1로 2증가, 2로 1증가
....
이런 식으로 수만 확인하면 되서 제곱이 n이되는 수까지만 확인을 하고,
해당 값의 제곱이 현재의 수보다 작을때 수를 증가하면 약수의 개수를 구할 수 있다.
문제에서 limit가 존재하므로 약수의 개수가 limit를 초과하면
count를 power로 바꾸고 해당 반복문을 break하면 시간을 절약할 수 있다!
function solution(number, limit, power) {
let result = 0
for (let n = 1; n <= number; n++) {
let count = 0
for (let i = 1; i * i <= n; i++) {
if (n % i === 0) {
count++
if (i * i < n) count++
}
if (count > limit) {
count = power
break
}
}
result += count
}
return result
}
https://school.programmers.co.kr/learn/courses/30/lessons/136798
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 햄버거 만들기 문제풀이 JS (0) | 2023.07.29 |
---|---|
[프로그래머스] 과일 장수 문제풀이 JS (0) | 2023.07.28 |
[프로그래머스] 명예의 전당(1) 문제풀이 JS (0) | 2023.07.26 |
[프로그래머스] 문자열 나누기 문제풀이 JS (0) | 2023.07.26 |
[프로그래머스] 가장 가까운 같은 글자 문제풀이 JS (0) | 2023.07.25 |
Comments