일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- js
- 개발 회고
- 자료 구조
- 백준
- 오블완
- REACT
- 구현
- 모던 자바스크립트 튜토리얼
- HTML5
- 자바스크립트
- 수학
- styled-components
- 세그먼트 트리
- 브루트포스
- 기본 문법
- three.js
- 시뮬레이션
- 프론트엔드
- poiemaweb
- 해시를 사용한 집합과 맵
- 토이 프로젝트
- 티스토리챌린지
- State
- JavaScript
- 회고
- Next.js
- 자바
- 엔트리포인트
- react-three/fiber
- 코딩일기
- Today
- Total
코딩하는 고릴라
[Javascript] BOJ_4673. 셀프 넘버 본문
🦍 문제
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net

🐈 문제 풀이
1. 무엇을 구해야 할까?
- 문제에 주어진 규칙에 따라, 생성자가 없는 숫자를 셀프 넘버라고 하며, 1 ~ 10,000 까지의 숫자 중 셀프넘버인 숫자들만 한 줄에 하나씩 출력해야 한다.
2. 어떻게 구해야 할까?
- 시간 제한은 1초이며, 1부터 10,000까지 반복문을 돌린다 하더라고 시간제한의 우려는 없다.
- 1부터 10,000까지 반복문을 돌며, 해당 숫자를 생성자로 가지는 숫자(셀프넘버가 아닌 숫자)를 선언한 set에 넣어준다.
- 그 후, 1부터 10,000까지 다시 한번 반복문을 돌며 해당 숫자가 set에 들어가있지 않다면(=셀프넘버라면) 이를 answer 배열에 push해준다.
- array의 join 함수를 통해 답을 출력한다.
3. 특별히 고려해야 할 사항은?
- 셀프넘버인지 아닌지 판별하는 부분은 문제에 기재되어 있는 사항이므로, 이를 잘 이용하여 숫자들을 예외 처리만 시켜주면 특별히 고려해야 할 사항은 없을 것 같다.
- 다만 위 예외 처리를 해주는 과정에서 set을 사용할지, array를 사용할지 등 방식에 따라 최적화의 여지는 존재한다.
🐕🦺 소스 코드
// 셀프넘버가 아닌 수를 넣어줄 set 선언
const set = new Set();
// 정답으로 출력될 수를 넣어줄 배열 선언
const answer = [];
for (let i = 0; i <= 10000; ++i){
// num : 숫자 i를 생성자로 하여 만들어지는 수를 저장하기 위한 변수
let num = 0;
// numStr : 숫자 i를 처리를 위해 string으로 변환
let numStr = i.toString();
// 숫자 i의 모든 자리의 수들을 더해 num에 저장
for (let j = 0; j < numStr.length; ++j){
num += Number(numStr[j]);
}
// 숫자 i를 생성자로 하여 만들어진 수(i+num)을 set에 저장
set.add(i+num);
}
for (let i = 1; i <= 10000; ++i){
// 만약 숫자 i가 set에 저장되어 있다면(셀프넘버가 아니라면) continue
if(set.has(i)) continue;
// 숫자 i가 셀프넘버라면 answer 배열에 저장
answer.push(i);
}
// answer 배열에 저장된 모든 수를 개행문자('\n')로 구분지어 출력
console.log(answer.join('\n'));
🐖 Think
- Javascript에서 set의 사용법에 대해 알 수 있었다. 이런 저런 문제들을 풀이해나가며 javascript에서 제공하는 컬렉션들도 익숙해질 수 있도록 해야겠다.
'APS' 카테고리의 다른 글
[Javascript] BOJ_14500. 테트로미노 (0) | 2023.12.18 |
---|---|
[Javascript] BOJ_17144. 미세먼지 안녕! (0) | 2023.12.18 |
[JAVA] BOJ_14499. 주사위 굴리기 (0) | 2023.11.04 |
[JAVA] BOJ_2910. 빈도 정렬 (0) | 2023.11.04 |
[JAVA] BOJ_1269. 대칭 차집합 (0) | 2023.10.26 |