소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
- 중복된 값이 없어야 하니까 Set에 담자
- 2부터 나눠보고 2로 안나눠질 때까지 한다음에 3으로 나눠보는 식으로 반복
- 나중에 배열 안에 Set 풀면 되겠네
function solution(n) {
const result =new Set()
for(let i=2;i<=n;i++){
if(n%i===0){
result.add(i)
n/=i
i=2 // 이게 문제 1로 바꾸면 해결
if(n<=1) break;
}
}
return [...result]
}
- 몇 번 테스트 했을 때 문제가 없었다 하지만 채점과정에서 몇 번 실패가 나옴 왜???
- 몇몇의 테스트에서만 문제가 생기니 다른 사람들의 코드와 비교해보자 => 대부분 While문을 사용했다 특정 숫자의 반복 계산을 했다
function solution(n) {
const answer = new Set()
while (n > 1) { // 위에 n===1일 때 break와 같음
for (let i=2; i<=n; i++) { // 동일
if (n % i === 0) { // 동일
answer.add(i) // 동일
n /= i // 동일
break
}
}
}
return Array.from(answer) // 스프레드 문법과 결과 같음
}
그래서 i가 문제인건 찾았는데 어떻게 바꿔야하고 왜 저런 결과가 나올까
결국 찍어봐야지 내가 짠 코드에서는 4가 들어가는 것을 발견, 왜 4가 들어갈까
이것도 찍어봤다 i=2로 했는데 반복문을 마치고 i++에 의해 3이 되는 것이다
그래서 i=1로 초기화를 하면 해결이 되었다
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
| 객체 구조를 활용한 배열 빼기 (0) | 2023.06.16 |
|---|---|
| Set 자료구조로 문자열 전달 (0) | 2023.06.15 |
| indexOf() (0) | 2023.06.15 |
| 스코프 활용 (0) | 2023.06.15 |
| 대소문자 반대로 (0) | 2023.06.14 |