Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- 동전 0
- 배열 중복 제거
- 배열 메소드
- 날씨 api
- 백준
- 서버 컴포넌트
- server component
- 실전프로젝트
- 자바스크립트
- 부트캠프항해
- 중복선택
- 항해99후기
- 프로그래머스
- 그리디
- jQuery
- 카테고리필터
- 클라이언트 컴포넌트
- 탐욕알고리즘
- 중복카테고리
- 항해99
- 항해99추천
- JavaScript
- 숫자를 별점으로
- NextJS v13
- react
- db수정
- greedy
- 로딩 후 실행
- 항해99솔직후기
Archives
- Today
- Total
공부 및 일상기록
[알고리즘] 약수의 개수와 덧셈 본문
문제
문제 설명
- 두 정수 left, right가 매개변수로 주어진다.
- left부터 right까지의 모든 수들 중에서 약수의 개수가 짝수인 수는 더하고 홀수인 수는 뺀 수를 return 하라
제한 사항
- 1<=left <= right <= 1,000
문제 풀이
나의 접근 방식
나는 일단 해당 숫자의 약수를 모두 구해서 배열로 만든 후, 해당 배열의 길이의 홀짝을 판별하여 더하거나 빼는 전략을 취했다.
실제 작성한 코드
function solution(a, b) {
//최종 제출할 총 합을 미리 선언
let num = 0;
//모든 약수를 구하는 함수
function dividers(number) {
//약수들의 배열을 미리 선언
let divider;
// 약수는 1과 자기자신을 포함하므로 미리 1과 자기자신을 넣음, 하지만 1이 오는 경우 1만 넣어야함
if (number === 1) {
divider = [1];
} else {
divider = [1, number];
}
//1과 자기자신은 이미 추가했으므로 2부터 나눠떨어지는 수를 push함
for (let i = 2; i < number; i++) {
if (number % i === 0) {
divider.push(i);
}
}
return divider;
}
//입력받은 두 수 a부터 b까지 짝수이면 더하고 홀수이면 빼는 반복문
for (let i = a; i <= b; i++) {
if (dividers(i).length % 2 === 0) {
num = num + i;
} else {
num = num - i;
}
}
return num;
}
나는 dividers()라는 함수를 만들어 입력한 숫자의 배열을 만들었다. 약수는 나누어 떨어지는 모든 수 이므로 1과 자기자신은 반드시 포함되어야 한다. 하지만 입력 숫자가 1인경우 1만 포함하면 되기 때문에 if와 else를 이용하여 미리 1과 자기자신을 배열에 담았다.
그리고 2부터 해당 숫자까지 나누어 떨어지는 숫자를 해당 배열에 push하여 약수 배열을 구했다.
이제 dividers 함수는 만들었으므로, for문을 이용하여 a부터 b까지 (문제상으로는 left부터 right까지 이다.)의 모든 숫자를 검사해 배열의 길이가 짝수이면 더하고 홀수이면 빼주는 작업을 하였다.
'개발 > 알고리즘, 자료구조' 카테고리의 다른 글
[알고리즘] 숫자 문자열과 영단어 (0) | 2023.04.20 |
---|---|
[알고리즘] K번째 수 (0) | 2023.04.20 |
[알고리즘] 폰켓몬 (0) | 2023.04.20 |
문자열 내 마음대로 정렬하기 (0) | 2023.04.20 |
[알고리즘, 자료구조] 해시테이블(Hash table) (0) | 2023.01.11 |