Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발 낙서장

백준 10871번 문제 풀이 본문

JavaScript/알고리즘

백준 10871번 문제 풀이

aggie 2022. 1. 30. 17:01

10871번 문제

 

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

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

 

첫째 줄에 두 개의 입력을 받고 다음 줄에 N개의 입력을 받아야하기 때문에 줄바꿈( \n )으로 split을 해줍니다.

const input = fs.readFileSync('/dev/stdin').toString().split('\n');

위와 같이 하면 input 배열의 첫번째 요소에는 N과 X를 받고 두번째 요소로 정수 N개의 수열 A를 받을 수 있습니다.

 

입력 예시를 보면 N과 X는 공백으로 나뉘어져 있으므로, input[0](첫번째 요소)를 다시 공백으로 나뉘어준 뒤 정수로 바꿔줍니다.

const N = parseInt(input[0].split(' ')[0]);
const X = parseInt(input[0].split(' ')[1]);

 

줄바꿈을 한 뒤 받는 N개의 수열 A는 numListA라는 변수에 넣어줍니다.

다만, 이때 수열 A 내부 숫자의 개수와 N이 같아야 하므로, 삼항 조건 연산자를 사용해서 검사를 했습니다.

const numListA = (input[1].split(' ').length == N) ? input[1].split(' ') : null;

input[1](두번째 요소들)은 얻고자 하는 각 요소들이 빈칸으로 나뉘어져 있으므로 공백으로 나눈 배열을 반환하고 그 길이를 N과 대조시켰습니다. 일치하지 않는다면 임의로 null을 반환시켰습니다.

 

여기까지 성공하면 이제 로직만 짜면 됩니다.

N개의 정수 중에 X보다 작은 수를 반환해서 '빈칸으로 구분되게' 출력해주면 됩니다. 단, X보다 작은 수가 반드시 1개 이상 있어야 합니다.

 

for문을 사용해야 하므로 수열 numListA의 길이를 범위값으로 하여 수열 내부의 요소 중 X보다 작은 수가 단 1개라도 있을 경우 그 즉시

numListA 배열에 filter메소드를 사용하여 요소들 중 X보다 작은 요소를 새 배열 answer에 반환하고 배열을 문자열로 바꿔주는 join메소드를 적용시킨 다음 콘솔에 출력해준 뒤 break를 통해 for문을 빠져나옵니다.

for(let i = 0; i < numListA.length; i++){
  if(numListA[i] < X){
    const answer = numListA.filter(num => num < X);
    console.log(answer.join(' '));
    break;
  }
}

빈칸으로 구분지어 출력해야 하므로 join메소드를 사용할 때 ' '사이에 공백을 하나 넣어줍니다.

Comments