코딩하는 고릴라

[Javascript] BOJ_4673. 셀프 넘버 본문

APS

[Javascript] BOJ_4673. 셀프 넘버

코릴라입니다 2023. 11. 25. 23:50
반응형

🦍 문제

 

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