공부기록/자바스크립트 코딩테스트

[백준/JS] 1946 신입사원

_우지 2023. 3. 28. 21:47

 

문제링크: https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성

www.acmicpc.net

 

정렬 + 그리디 문제이다.

첫번째 점수를 기준으로 정렬을 하고, 순회하면서 두번째 점수가 더 작은 값일때 count 를 하면된다.

 

1. 서류심사 성적을 기준으로 정렬을 한다.

2. target 이라는 Number.MAX_SAFE_INTEGER 를 저장한 변수를 생성한다.

2-1. if (target > 두번째 점수) 를 만족할 경우 target 을 갱신하고 count 를 +1 한다.

 

const fs = require('fs');

BOJkey = false;

let input = fs
  .readFileSync(BOJkey ? './javascript/1946/input.txt' : './dev/stdin')
  .toString()
  .trim()
  .split('\n')
  .reverse();

const answer = [];
const T = Number(input.pop());

for (let i = 0; i < T; i++) {
  const N = Number(input.pop());

  const data = [];
  for (let j = 0; j < N; j++) data.push(input.pop().split(' ').map(Number));
  data.sort((a, b) => a[0] - b[0]);

  let [target, count] = [Number.MAX_SAFE_INTEGER, 0];
  for (let j = 0; j < N; j++) {
    if (target > data[j][1]) {
      target = data[j][1];
      count++;
    }
  }

  answer.push(count);
}

console.log(answer.join('\n'));

 

시간 복잡도: O(T * N)