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