https://programmers.co.kr/learn/courses/30/lessons/72412
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์์ ๊ฒ์
["java backend junior pizza 150","python frontend senior chicken 210","python frontend senior chicken 150","cpp backend senior pizza 260","java backend junior chicken 80","python backend senior chicken 50"] ["java and backend and junior and pizza 100","pyt
programmers.co.kr
- ์ต๊ทผ ํ์๋ ๋ฌธ์ ์ค ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ํ ์ ํ ๊ฒ ๊ฐ๋ค.
โถ ์ฝ๋ :
let data = new Map();
function makeData(info)
{
let scores = [];
for(let s of info)
{
s = s.split(' ');
let arr = s.slice(0,4);
let score = parseInt(s[4]);
scores.push(score);
s= arr.join('');
if (data.has(s))
{
val = data.get(s);
val = [...val, score]
data.set(s, val);
}
else
{
data.set(s,[score]);
}
}
let keyList = data.keys();
for (const key of keyList)
{
let temp = data.get(key).sort((a,b) => a-b);
data.set(key, temp);
}
}
function solution(info, query) {
let answer = [];
makeData(info);
let keyList = [...data.keys()];
query.map((s) => {
s = s.split(' ');
let qScore = s.pop();
s= s.filter((element) => {if (element !== '-' && element !== 'and'){return true;}});
let temp = keyList.filter((key) => s.every(word => key.includes(word)));
let count = 0;
for (const key of temp)
{
let d = data.get(key);
count += d.length - binarySearch(d, qScore);
}
answer.push(count)
});
return answer;
}
function binarySearch(arr, score){
let low = 0;
let high = arr.length - 1;
let mid;
while(low < high)
{
mid = Math.floor((low+high) / 2);
// lower bound ์ฌ์ฉ high๋ฅผ mid -1์ด ์๋ mid๋ก ์ค์
if(arr[mid] >= score)
{
high = mid;
}
else
{
low = mid + 1;
}
}
//๋ง์ผ arr์ score๋ณด๋ค ํฐ ๊ฒฝ์ฐ๊ฐ ์๋ ๊ฒฝ์ฐ
if(arr[high] < score){
high += 1;
}
return high;
}
โถ ๋ฌธ์ ํ์ด :
1. ์ด๊ธฐ info์ ๋ํ์ฌ ๋ฌธ์์ด์ ํ์ฑํ๊ณ Map()์ key๋ก ๋ฌธ์์ด, value๋ก ์ ์๋ฅผ ์ ์ฅํ๋ค.
- ์ด๋ value๋ ์ ์๋ค์ ๋ฐฐ์ด๋ก ์ ์ฅํ๋ฉฐ, Map() ์ด๊ธฐํ๊ฐ ์๋ฃ๋ ํ ๊ฐ key๋ฅผ ์ด์ฉํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ค๋ค.(์ด๋ถ ํ์์ ์ํด)
2. query ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ์ฌ ํด๋น query์ ํฌํจ๋ ๋ฌธ์์ด๋ค์ด Map()์ key ๋ฌธ์์ด์ ํฌํจ๋์๋์ง ๊ฒ์ฌ ํ ํฌํจํ๋ ํค๋ค๋ง์ ์ถ์ถํ๋ค.
3. ์ดํ ์ถ์ถํ key๋ค์ ๋ํด Map()์์ ์ ์๋ฐฐ์ด์ ๊ฐ์ ธ์ ์ด๋ถ ํ์์ ์ด์ฉํด ์ํ๋ index๋ฅผ ์ฐพ๊ณ ๊ฐ์๋ฅผ ๊ตฌํ๋ค.
4. ๊ฐ query๋ฌธ์ ๋ํ์ฌ ๋ฐ๋ณตํ๋ฉฐ ์ฟผ๋ฆฌ๋ฌธ ๋ง๋ค countํ ๊ฐ์ answer๋ฐฐ์ด์ push ํ๋ค.
'๐ฏ CodingTest > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] 124 ๋๋ผ์ ์ซ์ (0) | 2022.06.11 |
---|---|
[Programmers] ๋ฉ์ฉกํ ์ฌ๊ฐํ (0) | 2022.06.11 |
[Programmers] (Javascript) ๋ฉ๋ด ๋ฆฌ๋ด์ผ (0) | 2022.04.28 |
[Programmers] (Javascript) ์ถ์ ํธ๋ํฝ (0) | 2022.04.26 |
[Programmers] (Javascript) ํํ (0) | 2022.04.25 |