728x90
https://softeer.ai/practice/6247
Softeer - ํ๋์๋์ฐจ๊ทธ๋ฃน SW์ธ์ฌํ๋ณดํ๋ซํผ
softeer.ai
(๋ต์ ์ฝ๋๋ ํฌ์คํ ๋งจ ์๋์ ์์ต๋๋ค)
ํ์ด์ ์ ์ถํด๋ดค๋๋ 0์ ใ ใ ์๊ฐ์ด๊ณผ + ์ค๋ต ๋ํ์ฅ
try 1 : input ๋ฟ๋ง์๋๋ผ carList์ trim() ์ ์ฉํด์ฃผ๊ธฐ
const carList = input[1].trim().split(' ').map(Number).sort((a, b) => a - b);
-> ์๊ฐ์ด๊ณผ ๋ฐ์
try 2 : indexOf -> ์ด์งํ์
ํ ์ผ 20๋ฒ๊น์ง๋ ํต๊ณผํ๋๋ฐ, 21๋ฒ๋ถํฐ ๊ณ์ ์๊ฐ์ด๊ณผ๋จ ใ ใ กใ
try 3 : slice ๋์ ์ซ์ ๊ฐฏ์๋ง ๊ตฌํ๊ธฐ
slice๋ก ๋ถ๋ถ๋ฐฐ์ด์ ๊ตฌํ ํ, ๋ ๋ฐฐ์ด์ length๋ฅผ ๊ตฌํด ๊ณฑํ์๋๋ฐ
์ด ๋ถ๋ถ์ ๋ฐ๋ก '์ซ์ ๊ฐฏ์'๋ง ๊ตฌํ๋๋ก ํจ์จ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ค
slice() ์ ๊ฑฐ → smallerCount, biggerCount๋ง ๊ณ์ฐ
→ O(n) ์ฐ์ฐ์ O(1)๋ก ์ต์ ํ!
๋์ ํ์ด
const fs = require('fs');
const input = fs.readFileSync(0,'utf-8').trim().split('\n');
const [n,q] = input[0].split(' ');
const carList = input[1].trim().split(' ').map(Number).sort((a, b) => a - b);
let answer = 0;
const binarySearch=(m)=>{
let left = 0; let right = n-1; let mid = 0;
m = Number(m);
while(left <= right){
mid = Math.floor((left+right)/2);
if(Number(carList[mid])===m) return mid;
if(Number(carList[mid])<m) left = mid+1;
else right = mid-1;
}
return -1;
}
const findGroup=(m)=>{
// ์ค์๊ฐ์ด m์ด ๋๋ ค๋ฉด, m๋ณด๋ค ํฐ ์ ํ๋ & ์์ ์ ํ๋ ์กฐํฉ
if(m <= carList[0] || m >= carList[n-1]) return 0;
let idx = Number(binarySearch(m));
if(idx<0) return 0;
let smaller = idx;
let bigger = n-idx-1;
return smaller*bigger;
}
for(let inputIdx=2; inputIdx<input.length; ++inputIdx){
console.log(findGroup(input[inputIdx]));
}
728x90