풀이1 - 효율성 테스트 3, 5 실패
/**
* 숫자의표현.js
* https://programmers.co.kr/learn/courses/30/lessons/12924?language=javascript
*/
/** 완전 탐색, 효율성 테스트 3, 5 실패 */
function solution(n) {
var answer = 0;
for (let i = 1; i < Math.ceil(n/2); i++) {
let sum = 0;
for (let j = i; j <= Math.ceil(n/2); j++) {
sum += j;
if (sum === n) {
answer ++;
break;
} else if (sum > n) {
break;
}
}
}
return answer + 1;
}
완전 탐색으로 연속된 값들을 더해서 답이되는 모든 경우를 2중 for문을 통해 확인하는 방식이다. 1에서부터 시작해서 하나씩 시작하는 숫자를 늘려가면서 확인했다. 중간 값보다 커지면 무조건 sum이 n보다 크지므로 중간값까지만 확인하면된다. 연속된 값들의 sum 이 n보다 커질 때를 기준으로 break하므로 1부터 시작해서 더해나갈 경우 확인해야할 케이스가 상당해져 3번, 5번 효율성 테스트가 실패했다.
풀이2 - 성공
/**
* 숫자의표현.js
* https://programmers.co.kr/learn/courses/30/lessons/12924?language=javascript
*/
/** 위에서 아래로 해서 성공 */
function solution(n) {
var answer = 0;
for (let i = Math.ceil(n/2); i > 0; i--) {
let sum = 0;
for (let j = i; j > 0; j--) {
sum += j;
if (sum === n) {
answer ++;
break;
} else if (sum > n) {
break;
}
}
}
return answer + 1;
}
작은 값부터 더해서 확인하는 방식이 아니라 중간 값부터 내려가면서 더하는 방식으로 방향만 거꾸로 바꿔줬다. sum 보다 커지는지를 확인해야하는 케이스가 줄어들어 모든 효율성 테스트를 통과했다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][자바스크립트][Level2] 영어 끝말잇기 (0) | 2022.03.05 |
---|---|
[프로그래머스][자바스크립트][Level1] 콜라츠 추측 (0) | 2022.02.28 |
[프로그래머스][자바스크립트][Level1] 이상한 문자 만들기 (0) | 2022.02.25 |
[프로그래머스][자바스크립트][Level2] 피보나치 수 (0) | 2022.02.25 |
[프로그래머스][자바스크립트][Level2][카카오] 캐시 (0) | 2022.02.22 |
댓글