https://school.programmers.co.kr/learn/courses/30/lessons/181921
프로그래머스 코테 lv.0 에서 처음으로 막혔던 문제. (정답률 73%)
계속 전전긍긍하다가 갑자기 이진수 문제일 것 같다는 생각이 머리를 스쳤다.
하지만 이진수 아이디어를 가지고도 문제풀이에는 진전이 없었고
테스트는 통과했지만 아주 허접한 코드가 나오고야 말았다.
내 코드
function solution(l, r) {
let arr = []
for(let i=0; i<10000; i++) {
let k = i.toString(2)*5
if (l<=k && r>=k) {
arr.push(k)
}
}
if(arr.length===0) {
arr.push(-1)
}
return arr
}
i를 10000까지 제한해 두었기 때문에
아마 테스트가 더 많았다면 절대 통과하지 못했을 코드(...)
다른 사람의 풀이를 보면
yield, every, 정규식 등의 다양한 풀이가 있었는데
이중 yield를 사용해서 내가 작성한 코드를 수정해 보았다.
function* zeroFive() {
let i = 0;
while(true) {
yield Number(i.toString(2))*5
i++;
}
}
function solution(l, r) {
let arr = [];
let a = 0
let k = zeroFive();
while(a<r) {
a = k.next().value
if(a<=r && a>=l) {
arr.push(a)
}
}
if(arr.length===0) {
arr.push(-1)
}
return arr
}
배운 내용
제너레이터 함수는 function에 *을 붙여 선언한다.
yield는 제너레이터 함수에서만 사용할 수 있다.
제너레이터 객체를 만들고 .next() 메소드를 호출하여 반환된 값을 차례로 얻을 수 있다.
'Coding Test' 카테고리의 다른 글
[JS] 프로그래머스 / 덧칠하기 (0) | 2024.12.21 |
---|---|
[JS] 프로그래머스 / <PCCP 기출문제> / 1번 - 동영상 재생기 (0) | 2024.12.16 |
[JS] 프로그래머스 / 푸드 파이트 대회 (0) | 2024.12.14 |
[JS] 프로그래머스 / 크기가 작은 부분 문자열 (0) | 2024.12.13 |
[JS] 프로그래머스 / 주사위 게임 3 (0) | 2024.12.10 |