-
나머지가 1이 되는 수 찾기너의말이보여네약점algorithm 2022. 4. 12. 23:31
풀이
function solution(n) { const startAt = 1; // (자아비판) endNum을 매개변수로 넘기지못해서 아쉬운 풀이 // 스프레드 연산자로 넘겨서 element 넣고빼는게 자유롭지가 못함 const rangeArr = [...Array(n).keys()].map(key => key + startAt); return rangeArr.find((e)=> (n % e) === 1) }
원래는 배열 rangeArr에 있는 첫번째 요소를 array.shift()로 제거하려고 했는데 생각해보니 스프레드 연산자로 구현해버렸기 때문에 전체가 사라지는 (...) 것때문에 map으로 전체 요소에 1을 더해주었다~ index는 0부터 시작이어서 그렇구나
JS에서 파이썬의 range함수를 구현하는 방법에 여러가지가 있는데 재미있다~ ㄲㄲ
console.log(rangeArr5)를 보면 n=5이면 0부터 시작해서 4까지 만들어주기 때문에 굳이 map으로 1을 더해주어서 약간.. 아쉬웠다.
탐토님 풀이
function range(start, end){ return Array.from({length: end - start}, (_, i) => start + i); } function solution(n) { return range(1, n).find(x => n % x === 1); }
이 풀이에서 좋았던 건 파이썬의 range함수를 그대로 구현해서 start와 end를 매개변수로 지정해줌으로써 범위를 직관적으로 볼 수 있다는 것이다.
탐토님 풀이2
function* range(start, end){ let i = start; while (i < end){ //코루틴 : 이 함수는 yield를 만날때마다 리턴한다, 제너레이터함수(호출될때마다 함수내부의 state 유지, // 2번째 호출이 될땐 내부상태를 가지고 실행~ // yield 시킨 range함수를 만듦 yield i++; } return; }
// generator 는 next를 호출할 때마다 값을 하나씩 yield 해줌 // type next = () => { value: T | undefined, done: boolean } > const generator = range(1, 4) undefined > generator.next() {value: 1, done: false} > generator.next() {value: 2, done: false} > generator.next() {value: 3, done: false} > generator.next() {value: undefined, done: true} // ... 스프레드 연산자는 이터레이터/제네레이터를 이용해서 구현되어 있음 [...range(1,4)] // [1,2,3]
> iter = Array(5).keys() // keys, values, entries도 iterator 를 반환함 Array Iterator [0, 1, 2, 3, 4] > iter.next() {value: 0, done: false} > iter.next() {value: 1, done: false} > [...iter] // 스프레드 연산자를 쓰면 나머지 값만 들어감 [2, 3, 4]
'너의말이보여네약점algorithm' 카테고리의 다른 글
졸업선물 JS-> Python 번역 (0) 2022.10.13 방문 길이 (0) 2022.09.06 알고리즘 학습방향 질문 내용 정리 (0) 2022.04.07 부족한 금액 계산하기 (0) 2022.04.06 비밀지도 (0) 2022.04.05