일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트 날씨
- leetcode
- 삼항연산자
- 부트캠프
- reactnativecli
- 코딩부트캠프
- RN 프로젝트
- [파이썬 실습] 심화 문제
- 프론트개발
- 엘리스 ai 트랙
- 간단한 날씨 웹 만들기
- [파이썬 실습] 기초 문제
- 자바스크립트 reduce()
- 자바스크립트
- 날씨 웹 만들기
- 자바스크립트 날씨 웹 만들기
- JavaScript
- 개발일기
- HTML
- 엘리스
- [파이썬 실습] 중급 문제
- 프론트개발공부
- 자바스크립트 split()
- [AI 5기] 연습 문제집
- 개발공부
- 프로그래머스
- 엘리스 AI 트랙 5기
- 코드스테이츠
- 리트코드
- 자바스크립트 sort()
- Today
- Total
개발조각
[프로그래머스] 숫자의 표현 본문
이번 문제는 어떻게 구할지에 대한 규칙을 파악하면 쉽게 풀 수 있을 것 같습니다.
접근방법
이 문제는 연속된 자연수들로 n을 표현하는 방법의 수를 구하는 문제입니다.
n이 15일 경우 4가지로 표현할 수 있습니다.
- 1 + 2 + 3 + 4 + 5 = 15
- 4 + 5 + 6 = 15
- 7 + 8 = 15
- 15 = 15
이렇게 연속되는 숫자로 구성이 되어야 됩니다.
그래서 제가 생각한 방법은 1+2+..., 2+3+... 반복해서 더한 값이 n을 구하는 방법입니다.
예시로 설명하겠습니다.
n=15인 경우
- i=1 -> 1+2+3+4+5 = 15 : true
- i=2 -> 2+3+4+5+6 = 20 : false
- i=3 -> 3+4+5+6 = 18 : false
- i=4 -> 4+5+6 = 15 : true
- i=5 -> 5+6+7 = 18 : false
- i=6 -> 6+7+8 = 21 : false
- i=7 -> 7+8 = 15 : true
i가 무엇인지 따라 i부터 연속적인 숫자를 더해서 n=15보다 클때까지 반복하고
더한 값이 n=15인 갯수를 세면 됩니다.
true가 3개이고, 어떤한 수를 해도 자기 자신(n=n) 일 경우는 무조건 포함함으로 3+1 해서 4개입니다.
여기서 중요한 점은 i=7까지만 해도 됩니다.
연속되는 숫자들이 1개일때(15=15) 다음은 연속되는 숫자들이 2개일 때 임으로(15=7+8)
15/2=7.5 임으로 7까지만 반복하면 됩니다.
해결방안
function solution(n) {
var answer = 1;
for(let i=1; i< n/2; i++){
let sum = 0;
let num = i;
while(sum < n){
sum += num;
num++;
if(sum === n) answer++;
}
}
return answer;
}
answer : 연속된 자연수들로 n을 표현하는 방법의 수가 몇 개인지
answer = 1을 해준 이유는 n이 어떤 숫자이든 n=n일 경우가 있기 때문입니다.
for문에서 i=1부터 시작하고 n/2까지 실행합니다.
n=15이면 i는 1~7까지 진행합니다.
sum : 연속된 자연수들 더한 값, 초기값으로 0으로 설정해 주었습니다.
num : 연속된 자연수, 초기값으로 i로 설정하여 i부터 더하게 해 주었습니다.
while문은 sum < n일 경우에만 실행하게 하였습니다.
while문을 돌릴 동안 i + (i+1) +... 이렇게 반복되도록 하였고
sum === num일 경우 answer에 +1을 해주었습니다.
프로그래머스 숫자의 표현 해결방안 설명은 여기까지입니다.
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2022.04.25 |
---|---|
[프로그래머스] 피보나치 수 (0) | 2022.04.25 |
[프로그래머스] 주차 요금 계산 (0) | 2022.04.22 |
[프로그래머스] 이진 변환 반복하기 (0) | 2022.04.21 |
[프로그래머스] 행렬의 곱셈 (0) | 2022.04.21 |