programmers

코딩 테스트 / k의 개수, 가까운 수

이미사용 2023. 5. 29. 22:04
명언
-
728x90
반응형

k의 개수

※풀이

1. Array(j-i+1)을 사용하여 길이가 j-i+1인 빈 배열을 생성합니다.
2 .fill(i)를 사용하여 빈 배열의 모든 요소를 i로 채웁니다.
3. map((v,index) => v + index)를 사용하여 각 요소에 인덱스를 더합니다. 이로써 배열은 [i, i+1, i+2, ..., j]의 숫자들을 가지게 됩니다.
4. join('')을 사용하여 배열의 요소들을 문자열로 결합합니다. 숫자들이 하나의 문자열로 이어집니다.
5. split(k)를 사용하여 문자열을 k를 기준으로 분리합니다. 이를 통해 k가 등장하는 부분들이 배열로 분리됩니다.
6. length - 1을 사용하여 분리된 배열의 길이에서 1을 뺍니다. 이는 k가 등장한 횟수를 나타냅니다. 그후 리턴하여 결과값을 보냅니다.

 

ex1)

{
    function solution(i, j, k) {
        return Array(j-i+1).fill(i).map((v,index) =>  v + index).join('').split(k).length -1
    }
    console.log(solution(1,13,1));
    //6
}

ex2)

{
    function solution(i, j, k) {
        return Array(j-i+1).fill(i).map((v,index) =>  v + index).join('').split(k).length -1
    }
    console.log(solution(10,50,5));
    //5
}

 

 

가까운 수

※풀이

1. array.sort((a,b) => a - b)를 사용하여 array값을 오름차순으로 정렬합니다.

※array.sort((a, b) => a - b)는 배열 array를 오름차순으로 정렬하는 방식
sort() 메서드에는 비교 함수가 필요합니다. 비교 함수는 두 개의 인자 a와 b를 받아서 비교 결과를 반환해야 합니다.
a - b를 반환하면 sort() 메서드는 a를 b보다 작은 값으로 간주하여 정렬합니다.
반환 값이 0보다 작은 경우에는 a를 b보다 앞으로 정렬합니다.
반환 값이 0인 경우에는 순서를 변경하지 않습니다.
반환 값이 0보다 큰 경우에는 a를 b보다 뒤로 정렬합니다.
a - b의 결과에 따라 sort() 메서드는 배열의 요소를 정렬합니다.
a - b의 값이 음수일 경우 a가 b보다 작으므로 a는 b 앞으로 정렬됩니다.
a - b의 값이 0일 경우 a와 b는 같은 값이므로 순서를 변경하지 않습니다.
a - b의 값이 양수일 경우 a가 b보다 크므로 a는 b 뒤로 정렬됩니다.

 

2. Difference 변수를 Infinity로 저장합니다. 이 변수는 현재까지의 최소 차이 값을 저장합니다.
3. result 변수를 0으로 저장합니다. 이 변수는 n과 가장 가까운 값을 저장합니다.
4. array의 각 요소 i에 대해서 반복합니다.
5. Math.abs(n-i)를 사용하여 n과 i의 차이의 절댓값을 계산합니다.
6.계산한 차이가 현재까지의 최소 차이보다 작으면 다음을 수행합니다:
   ·Difference를 계산한 차이로 저장합니다.
   ·result를 i로 업데이트합니다.
7. 반복이 종료되면 result를 반환합니다.

sort() JavaScript 배열 객체의 메서드로, 배열의 요소를 정렬하는 기능을 제공합니다.
Infinity JavaScript의 숫자 타입(Number type) 중 하나로, 양의 무한대를 나타내는 값입니다. 즉, Infinity는 양의 무한대를 나타내는 상수입니다.
Math.abs() Math.abs()는 JavaScript의 Math 객체의 메서드로, 주어진 숫자의 절댓값을 반환하는 기능을 제공합니다.

Math.abs() 메서드는 하나의 숫자를 인자로 받고, 해당 숫자의 절댓값을 반환합니다. 즉, 만약 인자로 음수가 전달되면 그 값을 양수로 변환하여 반환하며, 양수가 전달되면 그대로 반환합니다.

 

ex1)

{
    function solution(array, n) {
        array.sort((a,b) => a - b)
        let Difference = Infinity;
        let result = 0;
    
        for(let i of array){
            if(Math.abs(n-i) < Difference){
                Difference = Math.abs(n-i)
                result = i
            }
        }
        return result
    }
    console.log(solution([3, 10, 28],20));
    //28
}

ex2)

{
    function solution(array, n) {
        array.sort((a,b) => a - b)
        let Difference = Infinity;
        let result = 0;
    
        for(let i of array){
            if(Math.abs(n-i) < Difference){
                Difference = Math.abs(n-i)
                result = i
            }
        }
        return result
    }
    console.log(solution([10, 11, 12],13));
    //12
}

 

 

 

 

출처:https://school.programmers.co.kr/