일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- next.js
- 키패드누르기풀이
- 타입스크립트
- 오블완
- JavaScript
- 정렬 알고리즘
- 프로그래머스 자바스크립트
- 프로그래머스 자바스크립트 풀이
- 정규표현식문제
- Javascript 정렬
- 좌표거리구하기
- js 알고리즘
- 프로그래머스
- mysql스키마
- node.js
- 자바스크립트 정렬
- 자바스크립트 알고리즘
- TS
- 프로그래머스 신규아이디추천
- Javascript sort
- 깃허브
- TypeScript
- 자바스크립트 배열
- 알고리즘
- MySQL
- 자료구조
- 티스토리챌린지
- 맨해튼거리
- binary search
- 맨해튼거리예제
- Today
- Total
FE PARADISE
프로그래머스 숫자의 표현 - 자바스크립트 풀이 본문
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
슬라이딩 윈도우 기법을 활용하여 문제를 풀어보았다.
시작과 끝 포인트를 설정하고 시작부터 끝까지의 값들의 합이 주어진 n과 일치하는지 판단하며 방법의 수를 구하는 방식이다.
우선 전체 코드이다.
function solution(n) {
if(n === 1) return 1;
let start = 1, end = 1, sum = 1, count = 1;
while(start <= Math.ceil(n / 2)){
if(sum === n){
count++;
sum -= start;
start++;
} else if (sum < n){
end++;
sum += end;
} else {
sum -= start;
start++;
}
}
return count;
}
n이 1인 경우는 답이 1이므로 뒷 과정을 거칠 필요가 없으니 이렇게 1을 반환해주자.
if(n === 1) return 1;
각각 시작 포인트, 끝 포인트, 시작과 끝까지 값들의 합, 방법의 수 변수를 선언하자.
let start = 1, end = 1, sum = 1, count = 1;
n이 만약 15일 경우를 생각해보자. 14 ~ 9까지의 값들은 연속된 숫자합으로 표현하는 것이 불가능하다는 것을 알 수 있다. 8부터 연속된 숫자의 합을 확인하면 된다.
따라서 while문 동작 조건을 start가 Math.ceil(n/2)보다 작거나 같은 경우로 둔다.
sum이 n보다 작은 경우는 계속해서 end 포인트를 옮겨가며 sum에 end를 더해준다.
합이 n이 되는 경우, 방법의 수를 1 증가시키고 start를 다음 포인트로 옮겨주어야 한다. 그에 따라 sum 값에서 기존의 start 값은 빼주어야 한다.
합이 n보다 커지는 경우엔 방법의 수를 증가시키지 않고 start를 다음 포인트로 옮겨주어야 한다. 똑같이 그에 따라 sum 값에서 기존의 start 값은 빼주어야 한다. 코드는 다음과 같다.
while(start <= Math.ceil(n / 2)){
if(sum === n){
count++;
sum -= start;
start++;
} else if (sum < n){
end++;
sum += end;
} else {
sum -= start;
start++;
}
}
이 후 count를 반환해주면 끝이다.
'자료구조 & 알고리즘' 카테고리의 다른 글
프로그래머스 피보나치 수 - 자바스크립트 풀이 (0) | 2024.12.04 |
---|---|
프로그래머스 짝지어 제거하기 - 자바스크립트 풀이 (0) | 2024.12.01 |
프로그래머스 이진 변환 반복하기 - 자바스크립트 풀이 (0) | 2024.11.27 |
프로그래머스 JadenCase 문자열 만들기 - 자바스크립트 풀이 (0) | 2024.11.24 |
프로그래머스 최솟값 만들기 - 자바스크립트 코드 (0) | 2024.11.24 |