[Level1] 2. 4 ~ 9
4. 프린터 - 우선순위큐
function Queue() {
this.array = [];
}
Queue.prototype.enqueue = function (element) {
this.array.push(element);
};
Queue.prototype.dequeue = function () {
return this.array.shift();
};
Queue.prototype.front = function () {
return this.array[0];
};
Queue.prototype.max = function () {
return Math.max(...this.array);
};
function solution(priorities, location) {
var answer = -1;
let vq = new Queue();
let pq = new Queue();
for (let i = 0; i < priorities.length; i++) {
vq.enqueue(i);
pq.enqueue(priorities[i]);
}
let count = 0;
while (true) {
if (pq.front() === pq.max()) {
count++;
if (vq.front() === location) {
answer = count;
break;
} else {
vq.dequeue();
pq.dequeue();
}
} else {
vq.enqueue(vq.dequeue());
pq.enqueue(pq.dequeue());
}
}
return answer;
}
console.log(solution([2, 1, 3, 2], 2))
5. 완주하지 못한 선수
function solution(participant, completion) {
let p,
d = {};
for (let i = 0; i < completion.length; i++) {
p = completion[i];
if (d[p]) d[p]++;
else d[p] = 1;
}
for (let i = 0; i < participant.length; i++) {
p = participant[i];
if (!d[p]) return p;
d[p]--;
}
}
function solution(participant, completion) {
participant.sort()
completion.sort()
for (let i in participant) {
if(participant[i] !== completion[i]) return participant[i]
}
}
위 방법은 풀이가 굉장이 심플하지만 효율성 측면으로는 딕셔너리 이용한 게 더 좋다
6. 기능 개발
function solution(progresses, speeds) {
var answer = [];
// 앞 기능이 배포되어야 뒤에 기능도 배포될 수 있다 => queue
// 진척도 > 앞 기능이 배포될 수 있는 날짜
// 진척도 + 작업속도 * 날짜 >= 100
// 방정식으로 날짜 구하기
let head = 0
let tail = progresses.length;
let day = 0
let count;
while(head != tail){
count = 0
day++
for (let i = head; i < tail; i++){
if (progresses[i] + speeds[i] * day < 100) break
count++
}
if (count) {
answer.push(count)
head += count
}
}
return answer;
}
7. 네트워크 - bfs-인접행렬
function dfs(computers, visited, idx) {
if (visited[idx]) {
return 0;
}
visited[idx] = 1;
for (let i = 0; i < computers[idx].length; i++) {
if (computers[idx][i]) {
dfs(computers, visited, i);
}
}
return 1;
}
function solution(n, computers) {
var answer = 0;
let visited = new Array(n).fill(0);
for (let i = 0; i < n; i++) {
answer += dfs(computers, visited, i);
}
return answer;
}
8. 가장 큰 수 - 정렬
function solution(numbers) {
var answer = numbers
.map((n) => n + "")
.sort((x, y) => (y + x) - (x + y))
.join("");
return answer.split(0).join("") ? answer : "0"
}
9. H-Index
function solution(citations) {
var answer = 0;
citations.sort((x, y) => y - x);
for (let i = 0; i < citations.length; i++) {
if (citations[i] >= i + 1) answer = i + 1;
}
return answer;
}
while (answer + 1 <= citations[answer]) answer++
로 for 문 줄일 수 있다.