[백준] 4673: 셀프 넘버 - JS (브루트포스)
Algorithm/BackJun 2023. 8. 5.
반응형
목 차
- 문제
- 접근 방식
- 풀이
문제
n <= 10000 인 셀프 넘버를 출력하는 프로그램을 작성하시오.
더보기: 전체 문제 보기
접근 방식
먼저 10000 이하 라는 조건이 있으니, 배열을 10000개를 false로 채워준다.
그리고 for문을 사용해 생성사가 있는 인덱스의 값을 true로 바꿔주면 값이 false인 인덱스는 셀프 넘버가 되는 것이다.
풀이
⚠️주의: 학습을 위해 최소한의 메서드를 사용하여 작성하여 코드가 다소 길어질 수 있다. (해당하는 메서드는 주석으로 작성함.)
fillArray 함수: new Array(10000).fill(false) 와 같은 역할을 한다.
devide 함수: 인자로 전달된 수를 쪼개서 배열로 리턴하는 함수.
10000은 true이기에 패스하고, if문의 조건식이 하나이기에 큰 수 부터 작은 수 순서대로 else if 문을 활용하여 작성하며 내려갔다.
만약 그냥 if 문으로 작성하게 된다면, 100 이상의 셀프 넘버는 모두 true로 되는 상황이 발생한다.
function d() {
const selfNums = fillArray(10000, false); // new Array(10000).fill(false) 와 같음
for (let i = 1; i <= 10000; i++) {
if (i == 10000) { continue;
};
if (i >= 1000) {
const devided = devide(i); // 인자로 전달된 숫자를 쪼개어 배열로 전달하는 함수
selfNums[(i + devided[0] + devided[1] + devided[2] + devided[3]) - 1] = true;
}
else if (i >= 100) {
const devided = devide(i);
selfNums[(i + devided[0] + devided[1] + devided[2]) - 1] = true;
}
else if (i >= 10) {
const devided = devide(i);
selfNums[(i + devided[0] + devided[1]) - 1] = true;
}
else if (i <= 9) {
selfNums[(i + i) - 1] = true;
};
if(selfNums[i - 1] == false) {
console.log(i);
};
};
};
d();
더 훌륭한 알고리즘이 있을 수 밖에 없지만, 내 방식을 작성한 것 뿐이다.
반응형
'Algorithm > BackJun' 카테고리의 다른 글
[백준] 1654: 랜선 자르기 - JS (이분 탐색) (0) | 2023.09.05 |
---|---|
[백준] 2805: 나무 자르기 - JS (이분 탐색) (0) | 2023.09.03 |
[백준] 1920: 수 찾기 - JS (이분 탐색) (0) | 2023.09.02 |
[백준] 2748: 피보나치 수 2 - JS (재귀, DP) (0) | 2023.07.30 |
[백준] 별찍기 1-8 문제풀이 - JS (0) | 2023.07.13 |