| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 엘리스 ai 트랙
- 코딩부트캠프
- 날씨 웹 만들기
- [파이썬 실습] 중급 문제
- 자바스크립트 날씨 웹 만들기
- 자바스크립트 split()
- JavaScript
- 부트캠프
- HTML
- 삼항연산자
- reactnativecli
- 프론트개발공부
- RN 프로젝트
- 자바스크립트 날씨
- 리트코드
- 자바스크립트 sort()
- 자바스크립트
- 간단한 날씨 웹 만들기
- 코드스테이츠
- 엘리스 AI 트랙 5기
- [파이썬 실습] 기초 문제
- [AI 5기] 연습 문제집
- 개발일기
- 엘리스
- 자바스크립트 reduce()
- Today
- Total
개발조각
[프로그래머스] 약수의 개수와 덧셈 본문
2021.10.02에 푼 문제입니다.
이 문제 풀긴 풀었는데 제출 후 채점하기에서 테스트 1번이 계속 틀려서 결국 저보다 코드 훨 잘 치는 남친님한테 SOS 해서 해결했습니다...😢
간단하게 풀 수 있는 문제인데...
제가 겉멋만 들어서 reduce, map, for of 이런 거 쓰다가 산으로 갔어요...
충분히 쉽게 풀 수 있는걸 제가 왜 그렇게 풀었는지 모르겠네요.😢
기초가 중요하다는 거 다시 한번 반성 또 반성합니다...😂


해결방안
function solution(left, right) {
var answer = 0;
for(let i=left; i<= right; i++){
let count = 0;
for(let j=1; j< i+1; j++){
if(i % j == 0) count++;
}
count % 2 == 0 ? answer += i : answer -= i
}
return answer;
}
해결방안 순서
- for문을 사용해서 left부터 right값을 추출합니다.
- for문안에 for문을 넣어주어 두번째 for문에서는 left~right값의 약수 개수를 구합니다.
- 두 번째 for문에서 구해준 약수 개수를 가지고 짝수이면 더해주고 홀수이면 빼줍니다.
1단계. for문을 사용해서 left부터 right값을 추출합니다.
for(let i=left; i<= right; i++)
테스트 1
left = 13; right 17
for(let i=left; i<= right; i++) -> i = 13, 14, 15, 16, 17
테스트 2
left = 24; right 27
for(let i=left; i<= right; i++) -> i = 24, 25, 26, 27
2단계. for문안에 for문을 넣어주어 두 번째 for문에서는 left~right값의 약수 개수를 구합니다.
let count = 0;
for(let j=1; j< i+1; j++){
if(i % j == 0) count++;
}
- count : 약수의 개수를 나타내는 변수
- for(let j=1; j< i+1; j++) : 1부터 첫 번째 for문으로 들어오는 숫자까지 반복(13이 들어왔으면 1~13까지 반복)
- i % j == 0 : 약수를 구하는 방법
- if(i % j == 0) count++; : 약수의 개수를 카운터 하기
첫 번째 for문에서 i = 13일 경우
count = 0;
두 번째 for문에서 j=1
i % j == 0 -> 13 % 1 == 0 -> true
count++ -> count = 1;
두번째 for문에서 j=2
i % j == 0 -> 13 % 2 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=3
i % j == 0 -> 13 % 3 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=4
i % j == 0 -> 13 % 4 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=5
i % j == 0 -> 13 % 5 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=6
i % j == 0 -> 13 % 6 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=7
i % j == 0 -> 13 % 7 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=8
i % j == 0 -> 13 % 8 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=9
i % j == 0 -> 13 % 9 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=10
i % j == 0 -> 13 % 10 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=11
i % j == 0 -> 13 % 11 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=12
i % j == 0 -> 13 % 12 == 0 -> false
count = 1; 그대로
두번째 for문에서 j=13
i % j == 0 -> 13 % 13 == 0 -> true
count++ -> count = 2;
테스트 1
left = 13; right 17
13 -> count = 2; (1, 13)
14 -> count = 4; (1, 2, 7, 14)
15 -> count = 4; (1, 3, 5, 15)
16 -> count = 5; (1, 2, 4, 8, 16)
17 -> count = 2; (1, 17)
테스트 2
left = 24; right 27
24 -> count = 8; (1, 2, 3, 4, 6, 8, 12, 24)
25 -> count = 3; (1, 5, 25)
26 -> count = 4; (1, 2, 13, 26)
27 -> count = 4; (1, 3, 9, 27)
3단계. 두 번째 for문에서 구해준 약수 개수를 가지고 짝수이면 더해주고 홀수이면 빼줍니다.
여기서는 간단하게 삼항조건 연산자를 사용해주었습니다.
count % 2 == 0 ? answer += i : answer -= i
- count % 2 == 0 : 조건 -> 약수 개수가 짝수인지 홀수 있지
- answer += i : true
- answer -= i : false
테스트 1
left = 13; right 17
13 + 14 + 15 - 16 + 17 = 43
테스트 2
left = 24; right 27
24 - 25 + 26 + 27 = 52
여기까지 프로그래머스 약수의 개수와 덧셈 해결방안에 대해 설명해보았습니다.
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 소수 만들기 (0) | 2022.02.11 |
|---|---|
| [프로그래머스] 실패율 (0) | 2022.02.11 |
| [프로그래머스] 예산 (0) | 2022.02.09 |
| [프로그래머스] K번째수 (0) | 2022.02.09 |
| [프로그래머스] 내적 (0) | 2022.02.08 |