이런저런 IT 이야기

Programming Challenges #36 본문

Algorithm

Programming Challenges #36

이런저런 IT 이야기 2023. 5. 25. 22:13
반응형

문제 : 2나 5로 나눌 수 없는 0 이상 10,000 이하의 정수 n이 주어졌는데, n의 배수 중에는 10진수로 표기 했을때 모든 자리수가 1인 것이 있다. 그러한 n의 배수중에서 가장 작은 것은 몇자리 수 일까?

let integerArray = new Array(10000).fill(0)
integerArray = integerArray.reduce((ac, e, i, array) => {
    if (i%2 != 0 && i%5 != 0) {
        ac.push(i);
    }
    return ac
}, []).filter(e => e != 1);
integerArray.forEach(function (e) {
    calculator(e);
})
function calculator(e) {
    let result = [];
    for (let i = 0; i < 100000; i++) {
        let digit = String(e*i).split('').filter(e => { return parseInt(e) != 1;});            
        let len = digit.length;            
        if (len == 0) {        
            result.push(e*i)
        }
    }
    console.log(String(result[0]).split('').length)
}

 

해설 : 

입력값을 따로 주지 않고 0부터 10,000까지 조회하도록 구현하였습니다.

  1. let integerArray = new Array(10000).fill(0): 길이가 10000인 배열 integerArray를 생성하고, 초기값을 0으로 채웁니다.
  2. integerArray = integerArray.reduce((ac, e, i, array) => { ... }): reduce 메서드를 사용하여 integerArray 배열을 초기화합니다. 배열의 각 요소 e와 해당 인덱스 i를 확인하고, 홀수이면서 5의 배수가 아닌 경우에만 배열 ac에 추가합니다.
  3. integerArray = integerArray.filter(e => e != 1);: 배열에서 값이 1인 요소를 제거합니다.
  4. integerArray.forEach(function (e) { ... }): integerArray 배열의 각 요소 e에 대해 함수를 실행합니다.
  5. function calculator(e) { ... }: calculator 함수는 주어진 인자 e를 이용하여 계산을 수행합니다.
  6. let result = [];: 결과를 저장할 빈 배열 result를 생성합니다.
  7. for (let i = 0; i < 100000; i++) { ... }: 0부터 99999까지의 숫자에 대해 반복합니다.
  8. let digit = String(e * i).split('').filter(e => { return parseInt(e) != 1; });: e * i 값을 문자열로 변환하고, 각 자릿수를 배열로 만듭니다. 이때, 숫자 1은 제외합니다.
  9. let len = digit.length;: 배열 digit의 길이를 저장합니다.
  10. if (len == 0) { result.push(e * i) }: 배열 digit의 길이가 0이면, 즉 모든 자릿수가 숫자 1을 제외하고 구성되어 있으면 e * i 값을 result 배열에 추가합니다.
  11. console.log(String(result[0]).split('').length): result 배열의 첫 번째 요소를 문자열로 변환한 후, 자릿수의 개수를 출력합니다.

 

반응형