일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 너비 우선 탐색
- programmers
- 구현
- 자료구조
- DP
- BFS
- 알고리즘
- 그리디 알고리즘
- level2
- 자바스크립트
- CSS
- 딕셔너리
- 프로그래머스스쿨
- 브루트포스 알고리즘
- lv2
- 그래프이론
- 그래프 이론
- BASIC
- JavaScript
- web
- DFS
- 파이썬
- 정렬
- 웹 프론트엔드
- 백준
- 프로그래머스
- 스택
- 문자열
- 다이나믹 프로그래밍
- 그래프 탐색
Archives
- Today
- Total
DevLog:-)
[프로그래머스][JavaScript]-숫자의 표현 본문
반응형
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
function solution(n) {
let answer = 1;//자기 자신은 미리 1로 추가함
let k;
for(let i = 1; i<=(n/2);i++){
k = i;
for (let j = i+1; j <n;j++){
k+=j;
if(k == n){
answer++;break;}
else if(k >n){break;}
}
}
return answer;
}
이중 for문을 이용해 간단하게 해결할 수 있다.
시간초과 코드😭
function solution(n) {
var answer=1;
let end = parseInt((n/2)+1);
//for(let i =1;i<=end;i++){ arr.push(i); }
let arr =[...Array(end)].map((v,i) =>i+1);
for(let i =0;i<end;i++){
(arr.slice(i,end)).reduce((s,cv)=>{
if(s+cv == n){answer++; return;}
else if(s+cv >n){return;}
return s+cv;
})
}
return answer;
}
배열을 이용해서 풀었더니 시간초과!
✍️오히려 단순하게 생각할 필요도 있다는 것을 깨달았다.
📖다른 풀이
function solution(n) {
let answer = 0;
for (let i = 1; i <= n; i++) {
if (n % i === 0 && i % 2 === 1) answer++;
}
return answer;
}
굉장히 짧은 코드인데 수학적으로 푼 코드라고 할 수 있다. 👍👍
=> [자연수를 연속되는 자연수들의 합으로 표현할 수 있는 방법의 수 = 자연수의 약수 중에서 홀수인 수의 개수]
반응형