๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Softeer

[Javascript(NodeJS)/Softeer] Lv3. ์ž๋™์ฐจ ํ…Œ์ŠคํŠธ (HSAT 3ํšŒ ์ •๊ธฐ ์ฝ”๋”ฉ ์ธ์ฆํ‰๊ฐ€ ๊ธฐ์ถœ)

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)๋กœ ์ตœ์ ํ™”!

 

4ํŠธ๋งŒ์— ์„ฑ๊ณต

 

๋‚˜์˜ ํ’€์ด

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