이런저런 IT 이야기
Programming Challenges #36 본문
반응형
문제 : 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까지 조회하도록 구현하였습니다.
- let integerArray = new Array(10000).fill(0): 길이가 10000인 배열 integerArray를 생성하고, 초기값을 0으로 채웁니다.
- integerArray = integerArray.reduce((ac, e, i, array) => { ... }): reduce 메서드를 사용하여 integerArray 배열을 초기화합니다. 배열의 각 요소 e와 해당 인덱스 i를 확인하고, 홀수이면서 5의 배수가 아닌 경우에만 배열 ac에 추가합니다.
- integerArray = integerArray.filter(e => e != 1);: 배열에서 값이 1인 요소를 제거합니다.
- integerArray.forEach(function (e) { ... }): integerArray 배열의 각 요소 e에 대해 함수를 실행합니다.
- function calculator(e) { ... }: calculator 함수는 주어진 인자 e를 이용하여 계산을 수행합니다.
- let result = [];: 결과를 저장할 빈 배열 result를 생성합니다.
- for (let i = 0; i < 100000; i++) { ... }: 0부터 99999까지의 숫자에 대해 반복합니다.
- let digit = String(e * i).split('').filter(e => { return parseInt(e) != 1; });: e * i 값을 문자열로 변환하고, 각 자릿수를 배열로 만듭니다. 이때, 숫자 1은 제외합니다.
- let len = digit.length;: 배열 digit의 길이를 저장합니다.
- if (len == 0) { result.push(e * i) }: 배열 digit의 길이가 0이면, 즉 모든 자릿수가 숫자 1을 제외하고 구성되어 있으면 e * i 값을 result 배열에 추가합니다.
- console.log(String(result[0]).split('').length): result 배열의 첫 번째 요소를 문자열로 변환한 후, 자릿수의 개수를 출력합니다.
반응형
'Algorithm' 카테고리의 다른 글
퀵 정렬 알고리즘 (Quick Sort Algorithm) (0) | 2023.05.27 |
---|---|
삽입 정렬 알고리즘 (Insertion Sort Algorithm) (0) | 2023.05.27 |
알고리즘의 '복잡도' 세부 개념 (0) | 2023.05.25 |
Programming Challenges #35 (0) | 2023.05.24 |
선택 정렬 알고리즘 (Selection Sort Algorithm) (0) | 2023.05.24 |