[JS] 10871 X보다 작은 수 reduce/for

    10871 X보다 작은 수

    https://www.acmicpc.net/problem/10871

     

    10871번: X보다 작은 수

    첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

    www.acmicpc.net

    문제

    • 정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
    • 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
    • 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.
    • X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

    풀이

    reduce 매서드 사용해서 풀기

    const fs = require('fs');
    const inputData = fs.readFileSync(0,'utf8').toString().split('\n')
    
    // inputData = ['10 5','1 10 4 9 2 3 8 5 7 6'];
    
    const A = inputData[0].split(' '); // ['10','5']
    const data = inputData[1].split(' '); // ['1','10','4','9','2','3','8','5','7','6']
    
    
    // const n = parseInt(A[0]); 
    const x = parseInt(A[1]); //x값을 숫자열로 받음.
    
    
    
    const result = data.reduce((acc,cur) => {
        if((cur < x)){
            return acc =[...acc,cur] // 현재 값(cur)이 x보다 작으면 acc에 누적된다.
        }
        return acc
    },[]);// 기본값을 []으로 설정
    
    
    console.log(result.join(' ')) // array로 배열된 것을 조인하여 공백으로 출력함.

     

    reduce 순회 이해하기

    • reduce 함수는 네 개의 인자를 가짐.
      1. 누산기(acc) 2. 현재 값(cur) 3. 현재 인덱스(idx) 4. 원본 배열(src)
    • reduce 함수의 반환 값은 누산기에 할당되고, 누산기는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 된다.
      acc :
      1. acc = []
        cur = 1
        idx = 0
        src = ['1','10','4','9','2','3','8','5','7','6']
      2. acc = [1] // 5보다 작으므로 배열안에 누적됨.
        cur = 10
        idx = 1
        src = ['1','10','4','9','2','3','8','5','7','6']
      3. acc = [1] // 10은 5보다 크므로 누적되지 않음.
        cur = 4
        idx = 2
        src = ['1','10','4','9','2','3','8','5','7','6']
      4. acc = [1,4] // 5보다 작으므로 누적 됨.
        cur = 9
        idx = 3
        src = ['1','10','4','9','2','3','8','5','7','6']
      5. 이렇게 쭉쭉 순회 하다보면 acc = [ '1', '4', '2', '3' ] 가 담긴다.

    참고 : https://bbangaro.tistory.com/34 , https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

    for문을 이용해서 풀기

     inputData = ['10 5','1 10 4 9 2 3 8 5 7 6'];
    
    const A = inputData[0].split(' ');
    const data = inputData[1].split(' ');
    
    const n = parseInt(A[0]); //10
    const x = parseInt(A[1]); //5
    
    result = ''
    for (let i = 0; i <= n;i++){
        if(data[i] < x) { // i가 순회하면서 x보다 작은 수가 만족되면
           result += data[i] + ' '  // result 값에 공백과 함께 누적된다.
        }
    
    }
    
    console.log(result) // 1 4 2 3 

    'algorithm > 백준' 카테고리의 다른 글

    [JS] A+B-5 for/while/shift  (0) 2022.08.23
    [JS] 2588번 곱셈  (0) 2022.08.22
    [JS] 2439 별 찍기 -2 -padStart/삼항연산자/join  (0) 2022.08.22
    [JS] 2438 별 찍기-1  (0) 2022.08.22
    [JS] 11022번 A+N -8  (0) 2022.08.22

    댓글