728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/12924?language=javascript
코드
function solution(n) {
let answer = 0; //정답이 될 변수
let i = 1; //1부터 n까지 하나씩 오르는 변수
while (i <= n) {
let j = i; //현재 i를 copy
let copy = n; //n을 copy
while (copy > 0) {
//copy 즉, n이 양수일 동안
copy = copy - j; //연속된 수 j를 하나씩 빼주기
j++; //ex) 15 = 15-1 -> 14 = 14-2 -> 12 = 12-3 -> 9 = 9-4 ...
}
i++; //i를 +1 해줘서 다음 수부터 연속되는 수에대해서 또 찾기
if (copy === 0) answer++;
//두번째 while문을 통해서 나온 copy가 0이라면 연속된 j 수들의 덧셈에 의해 0으로 떨어진 것이니 정답 +1
else continue; //0으로 떨어지지 않았다면 i로 시작된 연속된 수는 n을 만들 수 없다는 의미니까 그냥 continue
}
return answer;
}
후기
- 문제 유형이 적혀있진 않았지만 그리디 알고리즘을 생각하며 풀어보았다
- i, j, n, copy 등 여러 변수들이 짧은 코드안에 복잡하게 등장했는데 각 쓰임새만 안 헷갈리면 쉽게 풀 수 있는 문제였다
- 하지만 좀 더 효율적인 방법이 있을 것 같다..
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 신고 결과 받기 / JavaScript (0) | 2022.02.10 |
---|---|
[Programmers] 소수 찾기 / JavaScript (0) | 2022.02.09 |
[Programmers] 최댓값과 최솟값 / JavaScript (0) | 2022.02.05 |
[Programmers] 서울에서 김서방 찾기 / JavaScript (0) | 2022.02.04 |
[Programmers] 자연수 뒤집어 배열로 만들기 / JavaScript (0) | 2022.02.04 |