-
[2] Day 1. Primes in numbers [5kyu]Code Challenge/codewars 2023. 3. 12. 16:35
숫자가 주어지면 소인수 분해를 해서 반환하는 함수
5kyu는 처음인 것 같은데 확실히 문제부터가 이게 무슨 말이지 한참 봤다 [...]
예를 보면 좀 더 이해가 쉬움 (예) n = 86240 should return "(2**5)(5)(7**2)(11)"
처음엔 재귀를 돌아야 하나 고민을 했는데, 처음부터 소수를 만날 때 마다 숫자를 나눠버리면 된다는 걸 깨달음!
소인수 분해 코드를 보고도 이해를 못한 걸 보면, 이해하지 못하면 봐도 모른다는 말이 맞다
다른 풀이들은 대체로 이중 for문이나 while을 섞어 썼는데 나는 divide 증가를 하지 않음으로써 단일 반복문으로 해결이 가능하다. 더 나은 결론인지까지는 모르겠다 ㅎ
새로이 배운 것은 Object.entries
object로 결과를 저장한 건 좋았는데 또 for문을 쓰는 것보다 map 을 써보고 싶어 찾았는데 object를 array로 변환해서 사용할 수 있게 해주는 함수.
for..in과 다른 점은 for..in은 프로토타입 chaining에 있는 properties까지 가져오지만 Object.entries를 쓰면 그렇지 않다고 한다. Object.hasOwnProperty를 쓰지 않을 수 있다는 점에서 장점이 있는 것 같다. chaining 함수를 붙여쓰기도 좋고!
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
Object.entries() - JavaScript | MDN
The Object.entries() static method returns an array of a given object's own enumerable string-keyed property key-value pairs.
developer.mozilla.org
function primeFactors(n) { let divide = 2; let r = {}; while (n != 1) { if (n % divide == 0) { r[divide] = (r[divide] || 0) + 1; n = n / divide; } else { divide++; } } return Object.entries(r) .map(([k, v]) => (v == 1 ? `(${k})` : `(${k}**${v})`)) .join(); }
'Code Challenge > codewars' 카테고리의 다른 글
Day 7, 8, 9, 10 모아서 정리! [10일 연속 성공] (0) 2023.03.12 Day 6. Break camelCase [6kyu] (0) 2023.03.06 Day 4. String ends with? [7kyu] (0) 2023.03.04 Day 3. Who likes it? [6kyu] (0) 2023.03.04 Day 2. hello world [8kyu] (0) 2023.03.02