[ 선형 자료구조 ] 배열 - 숫자 빈도수 구하기 ✅ (문풀)

김수연·2022년 9월 19일
0

자료구조 / 알고리즘

목록 보기
13/16
post-thumbnail

# 문제 해석

인자로 들어온 숫자 예) 1245

각 자릿수 별 숫자 빈도수 -
> 0: 0개, 1: 1개, 2: 1개, 3: 0개, 4: 1개, 5: 1개 ... 9: 0개 

위처럼 자리별 숫자의 빈도수를 배열로 반환하는데 없는 수도 포함해야 한다.

> 1245 결과 : [0, 1, 1, 0, 1, 1, 0, 0, 0, 0]가 된다.

# 해결책

+ 각 자리수에 있는 수를 알아내기

+ 인덱스와 해당 인덱스가 의미하는 값이 일치 [0, 1, 2 ...] 하니까
인덱스를 이용해서 바로 배열에 저장 가능

//숫자 빈도수 구하기
function answer(s, e) {
	let result = [];

  	for(let i = 0; i < 10; i++){
    	result[i] = 0;
    }
  
  	let num;
  	for( let i = s; i <= e; i++){
        num = i; // num = 129
      
    	while(num != 0){
        	result[num % 10]++; // 129 % 10 == 9, result[9] = 1
      		num /= 10; // s = 12.9
      		num = parseInt(s) // s = 12 
        }
    }
	
   return result;
}
  
/* main code */
let input = [
	// TC: 1
	[129, 137],
  
    // TC: 2
    [1412, 1918],
  
    // TC: 3
    [4159, 9182],
];
  
for (let i = 0; i < input.length; i++) {
	process.stdout.write(`#${i + 1} `);
    console.log(answer(input[i][0], input[i][1]));
}

# 중요 부분 해설

// 0 ~ 9 까지의 값(빈도수)을 0으로 우선 초기화 -> 업데이트 용이
for(let i = 0; i < 10; i++){
	result[i] = 0;
}
  
// 자릿수를 인덱스에 이용 
let num;
for( let i = s; i <= e; i++){
	num = i;
	while( num != 0){
    	result[s%10]++; //일의자리를 나머지로 얻어서 값 업데이트
      	s /= 10; // 일의자리를 소수로 만듦
        s = parseInt(s) // 정수로 만드는 함수로 소수 자름, 십의 자리 -> 일의자리
    }
}
profile
길을 찾고 싶은 코린이 of 코린이

0개의 댓글