문제를 보고 "아, 이건 5의 배수를 이용하면 되겠구나?" 라고 생각을 했는데 정작 5의 배수로는 풀 수 없는 문제라는 느낌이 들더라고요. 그래서 끝끝내 해답을 찾지 못하고 구글링을 해봤는데 거의 every 메서드를 사용하는 답안 외에는 찾기가 힘들어서
그냥 적절히 완탐으로 for문 안에 각각의 i의 값(l 부터 r까지 범위의 연속된 값들)을 toString으로 해당 숫자를 변환 후 while문을 문자의 길이만큼 돌려 include로 0인지 5인지를 일일이 대조 후 맞을 때마다 total을 증가시켜준 후 최종적으로 해당 문자(숫자 to 문자)열의 길이가 증가 된 total과 값이 같을 때 result 배열에 push 해준 후 break를 하도록 합니다.
이후 for문의 작업이 끝나면 다시 if문으로 result의 배열 길이가 0일때, 즉 while문의 조건 작업에 맞지 않아 조건에 하나도 만족하지 못한 배열 상태일 경우 -1을 할당 후 최종적으로 result를 반환하면 됩니다.
확실히 every 메서드를 쓰는게 코드의 가독성 측면에서 봤을 때 훨씬 깔끔한데, 원리 동작을 익히고자 정석으로 풀어본 문제였습니다. (나름 기초 문제중 어려운 정답률 72%의 문제라...)
function solution(l, r) { let result = [] for(let i = l ; i <= r ; i++){ let intoString = i.toString(); let j = 0; let total = 0; while(j !== intoString.length){ if(intoString[j].includes("5") || intoString[j].includes("0")) total++; if(total === intoString.length){ result.push(Number(intoString)); break; } j++; } } if(result.length === 0) result.push(-1); return result; }