π ν(Queue)μ κ°λ
ν(Queue) λ 'μ€μ μλ€' λΌλ λ»μ κ°μ§κ³ μλ€.
νλ λ¨Όμ λ€μ΄κ° λ°μ΄ν°κ° λ¨Όμ λμ€λ μλ£κ΅¬μ‘°μ΄λ€.
νμμ μ€νκ³Ό λ§μ°¬κ°μ§λ‘ μν μμμ μ½κ² μλ₯Ό μ°Ύμλ³Ό μ μλλ°
μλΉμ μ€μ μ μμλλ‘ μλΉμ μ μ₯μ₯ν λλ₯Ό μκ°ν΄λ³΄λ©΄ λλ€.
μ΄λ° ν(Queue) μ νΉμ§μ μ μ μ μΆ λλ FIFO(first in first out)μ΄λΌκ³ νλ€.
κ·Έλ¦¬κ³ μ€νκ³Ό λ§μ°¬κ°μ§λ‘ νλ μ½μ
νλ μ°μ°μ push
, κΊΌλ΄λ μ°μ°μ pop
μ΄λΌκ³ νλ€.
βοΈ ν(Queue)μ λμ μ리
κ·ΈλΌ ν(Queue) μμ μμκ° μ΄λνλ κ³Όμ μ λ€μκ³Ό κ°μ΄ κ·Έλ¦ΌμΌλ‘ κ·Έλ €μ μμ보λλ‘ νκ² λ€.
1. μ°μ λΉ ν(Queue) λ₯Ό νλ μ μΈν΄μ£Όκ² λ€.
2. ν΄λΉ νμ μμ 2
λ₯Ό μ½μ
νλλ° λΉ νμ΄λ―λ‘ μ μΌ μμ μ½μ
μ νλ€.( push
μ ν΄λΉνλ€. )

μ΄μ΄μ 5
λ₯Ό μ½μ
νλλ° ( push
μ ν΄λΉνλ€. )5
λ 2
λ€μμΌλ‘ μ½μ
νμΌλκΉ 5
λ 2
λ³΄λ€ λ€μ μκ²λλ€.
3. μ΄μ 2 λ²κ³Ό κ°μ μν νμμ pop
μ νκ²λλ©΄
λ€μκ³Ό κ°μ΄ λμ€μ λ€μ΄μ¨ 5
κ° μλλΌ λ¨Όμ λ€μ΄μ¨ 2
κ° λ¨Όμ λμ€κ² λλ€.

κ·Έλ¦¬κ³ λμ μ΄μ΄μ pop
μ ν λ² λ μ§ννλ©΄ 5
κ° λΉ μ Έλμ€κ² λλ€.
κ·ΈλΌ μ΄μ λͺ¨λ μμκ° ν(Queue) μμ λΉ μ Έλμ€κ²λ μνμ΄λ―λ‘ λ€μκ³Ό κ°μ΄ ν
λΉμ΄μλ€.
μ€ν(Stack) μ λ¨Όμ λ€μ΄μ¨κ² λμ€μ λΉ μ Έλμ€μ§λ§
ν(Queue) μ κ²½μ° λ¨Όμ λ€μ΄μ¨κ² λ¨Όμ λΉ μ Έλμ€λ κ²μ μ μ μλ€.
βοΈ ν(Queue)μ μ μ, ADT
ν(Queue) μ ADT λ₯Ό μ μν΄λ³΄κ³ νκ° μ€μ λ‘ λμνλ μ리λ₯Ό μ΄ν΄λ³΄μ
- ν(Queue)μ ADT
κ΅¬λΆ | μ μ | μ€λͺ |
---|---|---|
μ°μ° | isFull | νμ λ€μ΄ μλ λ°μ΄ν° κ°μκ° maxsizeμΈμ§ νμΈ ν boolean κ°μΌλ‘ λ°ν |
" | isEmpty | νμ λ€μ΄ μλ λ°μ΄ν°κ° νλλΌλ μλμ§ μλμ§ νμΈν boolean κ°μΌλ‘ λ°ν |
" | push | νμ λ°μ΄ν°λ₯Ό push νλ€. |
" | pop | νμμ μ²μμ push ν λ°μ΄ν°λ₯Ό pop νκ³ , ν΄λΉ λ°μ΄ν°λ₯Ό λ°ννλ€. |
μν | front | νμμ κ°μ₯ μ²μ pop ν μμΉλ₯Ό κΈ°λ‘νλ€. |
" | rear | νμμ μ΅κ·Όμ push ν λ°μ΄ν°μ μμΉλ₯Ό κΈ°λ‘νλ€. |
β¨ ν(Queue)μ λμ ꡬννκΈ°
κ·ΈλΌ μμ κ°μ΄ μ μν λ΄μ©μ λ°νμΌλ‘
λ€μκ³Ό κ°μ΄ ν(Queue)μ λμμ ꡬνν΄ λ³΄μ
class Queue {
_queue = [];
_maxSize = 10;
constructor(maxSize) {
this._maxSize = maxSize;
}
isFull(){
return this._queue === this._maxSize;
}
isEmpty(){
return this._queue.length === 0;
}
push(item){
this._queue.unshift(item);
}
pop(){
return this._queue.pop();
}
front(){
return this._queue.at(-1);
}
rear(){
return this._queue.at(0);
}
}
const queue = new Queue();
console.log(queue._queue); // []
console.log(queue.isEmpty()); // true
queue.push(1); // -> [1]
queue.push(2); // -> [2, 1]
queue.push(3); // -> [3, 2, 1]
console.log(queue._queue); // rear -> [3, 2, 1] -> front
console.log(queue.rear()); // rear: 3
console.log(queue.front()); // front: 1
queue.pop(); // [3, 2] ->
queue.pop(); // [3] ->
console.log(queue._queue); // rear -> [3] -> front
π€ ν(Queue)λ μΈμ μΈκΉ?
μ΄μ²λΌ λ¨Όμ λ€μ΄μ¨ κ²μ λ¨Όμ μ²λ¦¬νλ ν(Queue) μ λμ λ°©μμ
νλ‘κ·Έλλ° μΈμ΄μμ λ§μ΄ νμ©λκ³ μλ€.
λνμ μΌλ‘ μ¬λ¬ μ΄λ²€νΈκ° λ°μνμ λ λ°μν μμλλ‘ μ²λ¦¬ν λ ν(Queue) κ° νμ©λλ€.
- μμ
λκΈ°μ΄ : λ€νΈμν¬ ν΅μ μ ν λ λ€μμ ν΄λΌμ΄μΈνΈμμ μλ²μ μμ²νλ©΄
μλ²λ μμ²μ΄ λ€μ΄μ¨ μμλλ‘ μμ μ μ²λ¦¬νλλ° μ΄λ ν(Queue)λ₯Ό νμ©ν μ μλ€. - μ΄λ²€νΈ μ²λ¦¬ : μ΄λ€ μ ν리μΌμ΄μ
μ΄λ μμ€ν
μμ μ¬μ©μμ μ΄λ²€νΈ, μλ₯Ό λ€μ΄ ν€λ³΄λ μ
λ ₯μ΄λ
λ§μ°μ€ μμ§μμ μ²λ¦¬ν λ ν(Queue) λ₯Ό νμ©ν μ μλ€.
π λ¬Έμ νμ΄
κ·ΈλΌ μ§κΈκΉμ§ νμ΅ν ν(Queue) μ κ°λ
μ νμ©ν΄μ ν΄λΉ λ¬Έμ λ€μ νμ΄λ³΄κ³
νμ΄κ³Όμ μ κ° μ½λ λ§λ€ μ£ΌμμΌλ‘ μμ±νκ² λ€.
π― : νμ΄μ μ λ΅μΈ λ¬Έμ
π : μ°Έκ³ ν΄μ νμ λ¬Έμ
π§ͺ : μ λ΅μ λ³΄κ³ λΆμν λ¬Έμ
π― [ λ¬Έμ 15 ]. μμΈνΈμ€ λ¬Έμ
λ¬Έμ : μ½λ© ν μ€νΈ ν©κ²©μ λκΈ° - μλ°μ€ν¬λ¦½νΈ νΈ
function solution(n, k){
const queue = []; // κ³μ°μ μ²λ¦¬ν Queue
const answerQueue = []; // μΆλ ₯ν κ°μ λ΄μλλ Queue
// 1λΆν° nλͺ
κΉμ§μ μ¬λλ€μ queueμ μμλλ‘ μ±μ΄λ€.
for(let i=1; i<=n; i++) queue.unshift(i); // rear -> [ 5, 4, 3, 2, 1 ] -> front
// queueμ μμκ° μ‘΄μ¬ν λ
while(queue.length){
// queueμ frontμμ μ κ±°, rearμ μΆκ° λμμ kλ² λ§νΌ λ°λ³΅
for(let i=0; i<k; i++){
const item = queue.pop(); // queueμ frontμ pop!
queue.unshift(item); // queueμ reartμ push!
}
const item = queue.pop(); // pop!
answerQueue.push(item); // μΆλ ₯ν κ°μ λ΄μλλ answerQueue μ½μ
νλ€.
}
return answerQueue.at(0); // answerQueueμ rearμ λ€μ΄μλ μμλ₯Ό λ°ν
}
console.log(solution(5, 3)); // 3
console.log(solution(5, 2)); // 4
π [ λ¬Έμ 16 ]. κΈ°λ₯κ°λ°
λ¬Έμ : νλ‘κ·Έλλ¨Έμ€ - κΈ°λ₯κ°λ°
- β° μκ°μ΄κ³Ό
function solution(progresses, speeds) {
const date = []; // κ° κΈ°λ₯μ΄ μλ£λ λκΉμ§ 걸리λ μΌμλ₯Ό μ μ₯
let count = 0; // μμ
μ΄ μ§νλ λ μ§λ₯Ό μΉ΄μ΄ν
// progresses λ°°μ΄μ μμκ° μμ λμ
while (progresses.length) {
// progressesμ 첫 λ²μ§Έ μμ
μ΄ 100 μ΄μ μλ£λ κ²½μ°
if (progresses[0] >= 100) {
progresses.shift(); // 첫 λ²μ§Έ μμ
μ λ°°μ΄μμ μ κ±°
speeds.shift(); // κ·Έμ ν΄λΉνλ 첫 λ²μ§Έ μλλ μ κ±°
// μμ
μλ£κΉμ§ κ±Έλ¦° λ μ§ countλ₯Ό date λ°°μ΄μ μΆκ°
date.push(count);
// countλ₯Ό μ΄κΈ°ννμ¬ λ€μ μμ
μ λ μ§λ₯Ό λ€μ κ³μ°
count = 0;
} else { // μμ
μ΄ 100μ΄μ μλ£ μλ κ²½μ°
// progresses[0]μ ν΄λΉνλ μμ
μ speeds[0]λ§νΌ λ μ§ν
progresses[0] += speeds[0];
// νλ£¨κ° μ§λ¬μΌλ―λ‘ count μ¦κ°
count++;
}
}
const answer = [];
let c = 1; // κ°μ λ λ°°ν¬λ κΈ°λ₯μ κ°μλ₯Ό μΉ΄μ΄ν
νλ λ³μ
let stack = []; // μλ£λ μμ
λ μ§λ₯Ό μΆμ ν μ€ν
stack.push(date.shift()); // 첫 λ²μ§Έ μμ
μ μλ£ λ μ§λ₯Ό μ€νμ μΆκ°
// date λ°°μ΄μ μμκ° μλ λμ
while (date.length) {
const top = stack.at(-1); // μ€νμ top κ°μ κ°μ Έμ΄ (λ§μ§λ§μΌλ‘ λ°°ν¬λ μμ
μ μλ£ λ μ§)
// topμ΄ λ€μ μμ
μ μλ£ λ μ§λ³΄λ€ ν¬κ±°λ κ°μΌλ©΄(κ°μ λ λ°°ν¬ κ°λ₯)
if (top >= date.at(0)) {
c++; // λ°°ν¬λ κΈ°λ₯μ κ°μλ₯Ό μ¦κ°
date.shift(); // μλ£λ μμ
μ dateμμ μ κ±°
} else { // λ€μ μμ
μ΄ λ λ¦κ² μλ£λλ κ²½μ°
answer.push(c); // λ°°ν¬λ κΈ°λ₯μ κ°μλ₯Ό κ²°κ³Ό λ°°μ΄μ μΆκ°
c = 1; // μΉ΄μ΄νΈ μ΄κΈ°ν
// νμ¬ μμ
μ μλ£ λ μ§λ₯Ό μ€νμ μΆκ°νμ¬ μλ‘μ΄ κΈ°μ€ topμΌλ‘ μ€μ
stack.push(date.shift());
}
}
// λ§μ§λ§ λ¨μ λ°°ν¬λ κΈ°λ₯μ κ°μλ₯Ό κ²°κ³Ό λ°°μ΄μ μΆκ°
answer.push(c);
return answer;
}
console.log(solution([93, 30, 55], [1, 30, 5])); // [2, 1]
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1])); // [1, 3, 2]
μνλ κ²°κ³Όκ°μ μ»μμΌλ μκ°μ΄κ³Όκ° κ±Έλ €λΆλΏλ€..
λ€λ₯Έ μ½λμ λΉκ΅ν΄μ λ€μκ³Ό κ°μ΄ μκ°μ΄κ³Όλ₯Ό ν΄κ²°νλ€.
- μκ°μ΄κ³Ό ν΄κ²°
function solution(progresses, speeds) {
const date = []; // κ° κΈ°λ₯μ΄ μλ£λκΈ°κΉμ§ 걸리λ μκ°μ μ μ₯
// progresses λ°°μ΄μ μνν΄ κ° μμ
μ΄ μλ£λκΈ°κΉμ§ νμν μκ°μ κ³μ°
for (let i = 0; i < progresses.length; i++) {
// 100%κ° λ λκΉμ§ λ¨μ μμ
λμ μλλ‘ λλμ΄ μλ£κΉμ§ νμν λ μ§ κ³μ°
// Math.ceilμ μ¬μ©ν΄ μ¬λ¦Όνμ¬ μμμ μ΄ν λ μ§λ₯Ό μ²λ¦¬
let time = Math.ceil((100 - progresses[i]) / speeds[i]);
// κ³μ°λ μλ£ κ° μκ°λ€μ date λ°°μ΄μ μΆκ°
date.push(time);
}
const answer = [];
let count = 1; // κΈ°λ₯μ κ°μ
let current = date[0]; // 첫 λ²μ§Έ κΈ°λ₯μ΄ κΈ°μ€μ΄ λλ μλ£ λ μ§
// date λ°°μ΄μ μννλ©΄μ λ°°ν¬ κ°λ₯ν μμ
κ·Έλ£Ήμ κ³μ°
for (let i = 1; i < progresses.length; i++) {
// νμ¬ κΈ°μ€ λ μ§λ³΄λ€ λ¦κ² μλ£λλ μμ
λ€μ΄ μλμ§ νμΈ
if (current >= date[i]) {
// κΈ°μ€ λ μ§λ³΄λ€ λ¦μ§ μμ μμ
λ€μ κ°μ λ°°ν¬ κ·Έλ£Ήμ ν¬ν¨
count++;
} else {
// κΈ°μ€ λ μ§λ³΄λ€ λ¦κ² μλ£λλ μμ
μ΄ μλ€λ©΄ μλ£
answer.push(count); // νμ¬ κ·Έλ£Ήμ μμ
κ°μλ₯Ό answer λ°°μ΄μ μΆκ°
count = 1; // μΉ΄μ΄νΈλ₯Ό 1λ‘ μ΄κΈ°ν
current = date[i]; // μλ‘μ΄ κΈ°μ€ λ μ§λ‘ λ³κ²½
}
}
// λ§μ§λ§μΌλ‘ λ¨μ μμ
μΌμ answerμ μΆκ°
answer.push(count);
return answer;
}
console.log(solution([93, 30, 55], [1, 30, 5])); // [2, 1]
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1])); // [1, 3, 2]
while
λ¬ΈμΌλ‘ ν΄λΉ μμκ° μ‘΄μ¬ν λ κΉμ§ 루νλ₯Ό λλ λ°©μμΌλ‘ νμ§μκ³ shift()
λ©μλλ₯Ό μ¬μ©νμ§ μμ λ°©ν₯μΌλ‘ μ½λλ₯Ό μμ±ν΄ μκ°μ΄κ³Όλ₯Ό ν΄κ²°νλ€.
π― [ λ¬Έμ 17 ]. μΉ΄λλμΉ
λ¬Έμ : νλ‘κ·Έλλ¨Έμ€ - μΉ΄λλμΉ
function solution(cards1, cards2, goal) {
// μ€μ²© λ°λ³΅μΌλ‘ goalλ§νΌ μνν΄ cards1, cards2 μμμ κ°κ° λΉκ΅νλ€.
for(let i=0; i<goal.length; i++){
for(let j=0; j<goal.length; j++){
// iμ μννλ goalμμμ jλ‘ μννλ cards1κ° κ°μ λ ν΄λΉ cards1 μμλ₯Ό μ κ±°
// μΌμΉνμ§ μμ κ²½μ° cards2λ‘ μμ μμ
μ μ²λ¦¬
if(cards1[j] === goal[i]) cards1.shift();
else if (cards2[j] === goal[i]) cards2.shift();
}
};
// cards1, cards2λ₯Ό νλμ λ°°μ΄λ‘ κ²°ν©
const result = [...cards1, ...cards2];
/**
* - κ²°ν©λ λ°°μ΄ resultμ μμκ° μμ κ²½μ° goalμμμ€μμ resultμ ν¬ν¨λμ΄ μλκ² νλλΌλ μμΌλ©΄
* 'Yes' κ·Έλ μ§ μμΌλ©΄ 'No'λ₯Ό λ°ν
* - μμΈμΌ κ²½μ° 'Yes'λ°ν
*/
if(result.length)!goal.some(str => result.includes(str)) ? 'Yes' : 'No'
else return 'Yes';
}
console.log(solution(
["i", "drink", "water"],
["want", "to"],
["i", "want", "to", "drink", "water"]
)); // "Yes"
console.log(solution(
["i", "water", "drink"],
["want", "to"],
["i", "want", "to", "drink", "water"]
)); // "No"
νκ³
μ€ν(Stack) μ΄λ λΉμ·ν λλμ΄λΌ κ°λ μ μ΄ν΄ λλ€.
κ·Έλ°λ° λ§μ λμ΄λκ° μλ λ¬Έμ λ₯Ό νλλ μ μ©νκΈ° νλ€λ€.. π₯²
μΆμ²
'π§ͺ Computer science > Data Structure' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ Data Structure ] π μ°κ²° 리μ€νΈ(Linked List) (0) | 2025.01.02 |
---|---|
[ Data Structure ] π₯ μ€ν(Stack) (0) | 2025.01.02 |