210519 ์์์ผ 9~11์ผ์ฐจ
# 8์ผ์ฐจ ๋ณต์ต
CH3 ๋ฆฌ์คํธ
- #1 :ย ํ์ฌ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ณด๋ค ํด ๋๋ง ์์๋ฅผ ์ฝ์ ํ๋ ํจ์๋ฅผ ๊ตฌํํ์์ค. ์ฌ๊ธฐ์ ํฌ๋ค๋ ์๋ฏธ๋ ์ซ์์ผ ๋๋ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๊ณ , ํ ์คํธ์ผ ๋๋ ์ํ๋ฒณ์์ผ๋ก ๋์ค์ ์๋ฏธํ๋ค.
ํ์ฌ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ณด๋ค ํด ๋๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ง ํ์ธํ๊ธฐ ์ํ ํจ์๋ฅผ ๋ง๋ค์๋ค.
๋ชจ๋ ์์๋ณด๋ค ํฌ๋ฉด true, ํฐ ์์๊ฐ ์กด์ฌํ ์ ์ค๊ฐ์ false๋ฅผ ๋ฐํํด์ฃผ๋ ํจ์๋ฅผ ๊ตฌํํ๋ค.
๋จผ์ ์ฝ์
ํ๊ณ ์ ํ๋ ์์ (after)๋ฅผ findํจ์๋ก ์ฐพ์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ์ ๋ค์ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ทธ ์์น์ sliceํจ์๋ฅผ ์ด์ฉํด์ ์ฝ์
ํ์๋ค. ์ฝ์
ํ์๋ listSize๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
- #2 ํ์ฌ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ณด๋ค ์์ ๋๋ง ์์๋ฅผ ์ฝ์ ํ๋ ํจ์๋ฅผ ๊ตฌํํ์์ค.
๋น๊ต ์ฐ์ฐ์๋ง ๋ฐ๋๋ก ๋ฐ๊พธ์ด ๊ตฌํํ์๋ค.
- #3 ์ฌ๋์ ์ด๋ฆ๊ณผ ์ฑ๋ณ์ ์ ์ฅํ๋ Person ํด๋์ค๋ฅผ ๊ตฌํํ์์ค. ์ต์ํ 10๊ฐ์ Person ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋์์ค. ๋ฆฌ์คํธ์์ ๊ฐ์ ์ฑ๋ณ์ ๊ฐ์ง ์ฌ๋์ ๋ชจ๋ ์ถ๋ ฅํ๋ ํจ์๋ฅผ ๊ตฌํํ์์ค.
filter๋ ์ฃผ์ด์ง ์กฐ๊ฑด์ ํต๊ณผํ๋ ๋ชจ๋ ์์๋ฅผ ๋ชจ์ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ํตํด ์ธ์๋ก ์ฃผ์ด์ง ์ฑ๋ณ์ ๊ฐ์ง ๊ฐ์ฒด๋ง ๋ชจ์์ ๋ฐฐ์ด์ ๊ตฌ์ฑํ๋๋ก ํ๋ค.
CH4 ์คํ
- ๊ฐ์ฅ ์ ๋ถ๋ถ์์๋ง ์๋ฃ์ ์ถ๊ฐ/์ญ์ ๊ฐ ์ผ์ด๋๋ฏ๋ก ์คํ์๋๊ฐ ๋น ๋ฅด๊ณ ๊ตฌํ์ด ์ฝ๋ค.
- ํ์ ์ ์ถ๋ก ๋ฐ๋ฐ๋ฅ์ ์๋ ์์์ ์ ๊ทผํ๋ ค๋ฉด ๋ชจ๋ ์์๋ฅผ ์ ๊ฑฐํ๋ ์ ๋ฐ์ ์๋ค.
- Top์ pop์ผ๋ก ํ์ธํ ์ ์์ง๋ง ์์๋ฅผ ๊บผ๋ด๊ธฐ ๋๋ฌธ์ peek์ผ๋ก ๋ด์ฉ์ ํ์ธํ๋ค. peek์ top - 1์ ์์น์ ์ ๊ทผํด ์คํ์ ํ ์์๋ฅผ ํ์ธํ๋ค. (์คํ์ ์์๊ฐ 3์ด๋ฉด top(length)๋ 3์ด๊ณ ๋ฐฐ์ด์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๊ฐ์ ๊ฐ์ฅ ์ ๊ฐ์ด๋ฏ๋ก top-1์ด top์ ์๋ ์์์ ์ธ๋ฑ์ค๋ค.
- ์ง๋ฒ ๋ณํ
1. n์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ซ์๋ n%b์ด๋ค. ์ด ๊ฐ์ ์คํ์ ์ถ๊ฐํ๋ค.
=> s.push(num % base);
2. n์ n/b์ผ๋ก ์นํํ๋ค.
=>ย num = Math.floor((num /= base)); // Math.floor๋ ์์๊ฐ์ด ์กด์ฌํ ๋ ์์๊ฐ์ ๋ฒ๋ ค์ฃผ๋ ๊ธฐ๋ฅ
3. n=0 ์ด ๋๊ณ ๋๋จธ์ง๊ฐ ์์ ๋๊น์ง 1๋ฒ, 2๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
=>ย do { } while( num > 0 ) ;
4. ์คํ์ ์ ์ฅ๋ ์ซ์๋ฅผ ๋ชจ๋ ๊บผ๋ด ๋ณํ๋ ์ซ์ ๋ฌธ์์ด์ ๋ง๋ ๋ค.
=>ย while(s.length() > 0 ) { converted += s.pop(); } // s์ ์์๊ฐ pop์ ํตํด ์ค์ด๋ค๋ค๊ฐ 0๊ฐ๊ฐ ๋๋ ์๊ฐ while๋ฌธ์ ์ข
๋ฃ๋๋ค.
return converted;
- ํ๋ฌธ
๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ํ๋์ฉ ๋ฃ๊ณ ๋ค์ ๊บผ๋ด๋ฉด์ ๋ง๋ค์ด์ง ๋ฌธ์์ด๊ณผ ์๋ณธ ๋ฌธ์์ด์ ๋น๊ตํ๋ฉด ํ์ธํ ์ ์๋ค.
- ์ฌ๊ท
์คํ์ ์ถ๊ฐํ ๋ค ๋ฃจํ๋ฅผ ๋๋ฉด์ ๊บผ๋ด์ ์ํํ๋ฉด ์ฌ๊ท์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
210519 ์์์ผ 9~11์ผ์ฐจ
(์ฑ
์ ๋ณด๋ฉด์ ์ฝ๋ฉ์ ํ๋๋ฐ ์ธํดํ๋ฉด์ ๋ธ๋ก๊ทธ์ ์์ฑํ ์๊ฐ์ด ์์ด ํ๋ฒ์ ์์ฑํจ)
CH5 ํ
ํ๋ ๋ฆฌ์คํธ์ ์ผ์ข
์ผ๋ก ๋๋ถ๋ถ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฝ์
๋๊ณ ์๋ถ๋ถ์์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ ๊ตฌ์กฐ์ด๋ค. ์ผ์ด๋ ์์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง๋ง ์คํ๊ณผ ๋ฐ๋๋ก ๋จผ์ ๋ค์ด์จ ์์๋๋ก ์ฒ๋ฆฌํ๋ค. ์ํ์์ ๋จผ์ ์จ ๊ณ ๊ฐ๋ถํฐ ์ํ๋ ์
๋ฌด๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์ ์
์ ์ถ(First In, First out). ์ด์์ฒด์ ์ ํ๋ก์ธ์ค ์ฒ๋ฆฌ ์์, ํ๋ฆฐํธ ์คํ๋ฌ, ๋๊ธฐ์ค ๋ฑ์ ์ฌ์ฉํ๋ค.
5.1 ํ ๋์
์ธํ๋ ํ์ ๋ ๋ถ๋ถ์ ์์ ์ถ๊ฐ, ๋ํ๋ ํ์ ์๋ถ๋ถ์ ์์ ์ญ์ , ํ์ ์๋ถ๋ถ ์์๋ฅผ ํ์ธํ๋ peek, ์์ ๊ฐ์ length, ์ ์ฒด ์ญ์ clear
5.2 ๋ฐฐ์ด ๊ธฐ๋ฐ์ Queue ํด๋์ค ๊ตฌํ
ํนํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ Queue ํด๋์ค ๊ตฌํ์ ๋ง์ ๋์์ ์ค๋ค. ๋ฐฐ์ด์ ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ push() ํจ์, ๋ฐฐ์ด์ ์๋ถ๋ถ์ ์์๋ฅผ ์ญ์ ํ๋ shift() ํจ์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
function enqueue(element) {
this.dataStore.push(element);
}
function dequeue() {
return this.dataStore.shift();// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ ์ญ์
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
// ๋ชจ๋ ์์ ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr;
}
// ํ๊ฐ ๋น์๋์ง ํ์ธfunction empty() {
if (this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
let q = new Queue();
q.enqueue("M");
q.enqueue("C");
q.enqueue("J");
console.log(q.toString());
q.dequeue();
console.log(q.toString());
console.log("Front of queue: " + q.front());
console.log("Back of queue: " + q.back());
MCJ๋ฅผ ์ธํํ๊ณ ๋ํ๋ฅผ ํ๋ฒ ์ํํ๊ณ ๋๋ฉด ๋งจ ์์ ์์์ธ M์ด ์ฌ๋ผ์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
front()๋ ๋งจ ์์ ์์, back()์ ๋งจ ๋ค์ ์์๋ฅผ ๋ณด์ฌ์ค๋ค.
5.3 Queue ํด๋์ค ์ฌ์ฉํ๊ธฐ : ์คํ์ด ๋์ค ํํฐ์์ ํํธ๋ ์ ํ๊ธฐ
ํํฐ๊ฐ ์์๋๋ฉด ์ฒซ ๋ฒ์งธ ๋จ์์ ์ฌ์๊ฐ ํํธ๋๊ฐ ๋๋ค. ๋ค์์ผ๋ก ๊ฐ๊ฐ์ ์ฑ๋ณ์์ ๋ค์์ผ๋ก ์ค์ ์ ๋จ์๊ฐ ์์ผ๋ก ๋์ค๊ณ ์ด๋ฆ์ด ์๊ฐ๋๋ค. ๋จ๋
์ ์ค์ด ์ค์ด๋ค๋ฉด์ ๋งจ ์์ค์ ๋จ์ ๋จ์๊ฐ ํ๋๋ ์์ผ๋ฉด ์ด ์ฌ์ค์ ๊ณต์งํ๋ค.
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
this.count = count;
}
function enqueue(element) {
this.dataStore.push(element);
}
function dequeue() {
return this.dataStore.shift();// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ ์ญ์
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
// ๋ชจ๋ ์์ ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr;
}
// ํ๊ฐ ๋น์๋์ง ํ์ธfunction empty() {
if (this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
function Dancer(name, sex) {
this.name = name;
this.sex = sex;
}
function getDancers(males, females) {
// # : text file ์ฝ๊ธฐconst fs = require("fs");
const names = fs.readFileSync("dancers.txt").toString().split("\n");
// # : trim()์ผ๋ก ์๋ค๋ก ๋ถ์ด ์๋ ๊ณต๋ฐฑ์ ์์ ์ค๋ค.for (let i = 0; i < names.length; ++i) {
names[i] = names[i].trim();
}
for (let i = 0; i < names.length; ++i) {
// # : ๊ฐ ํ์ sex, name์ผ๋ก ๊ตฌ๋ถํ๊ฒ ํ๋ค.let dancer = names[i].split(" ");
// console.log(dancer[0], dancer[1]);let sex = dancer[0];
let name = dancer[1];
if (sex === "F") {
females.enqueue(new Dancer(name, sex));
} else {
males.enqueue(new Dancer(name, sex));
}
}
}
function dance(males, females) {
console.log("The dance partners are: \n");
while (!females.empty() && !males.empty()) {
// # : ๋จ์, ์ฌ์ ๋์๋ฅผ ์ง ์ง๊ณ ๊ณตํํ๋ค.let person1 = females.dequeue();
let person2 = males.dequeue();
console.log(
"Female dancer is: " + person1.name,
"and the male dancer is: " + person2.name
);
}
}
let maleDancers = new Queue();
let femaleDancers = new Queue();
getDancers(maleDancers, femaleDancers);
dance(maleDancers, femaleDancers);
// if (!femaleDancers.empty()) {// console.log(femaleDancers.front().name + " is waiting to dance.");// }// if (!maleDancers.empty()) {// console.log(maleDancers.front().name + " is waiting to dance.");// }// # : ์ฌ๊ธฐ์๋ ์ผ๋ง๋ ๋ง์ ์์ ๋์๊ฐ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋์ง ์ ์ ์๋ค. ํ์ ์์ ์๋ฅผ ์ถ๋ ฅํ๋ ํจ์๋ฅผ ์ถ๊ฐํ๋ค.function count() {
return this.dataStore.length;
}
if (femaleDancers.count() > 0) {
console.log(
"There are " +
femaleDancers.count() +
" female dancers waiting to dance."
);
}
if (maleDancers.count() > 0) {
console.log(
"There are " + maleDancers.count() + " male dancers waiting to dance."
);
}
์์ ํ
์คํธ ํ์ผ์ ์ฝ์ด์์ ์ค์ ์ธ์ด ๋ค ์ง์ ์ง์ด ์ฃผ์๋๋ฐ M(๋จ์ฑ) 3๋ช
์ด ๋จ์์๋ค๊ณ ๊ณต์งํ๋ค.
5.4 ํ๋ก ๋ฐ์ดํฐ ์ ๋ ฌํ๊ธฐ
ํ๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ์์ ๋ ฌ์ ๊ตฌํํ ์ ์๋ค. ๊ธฐ์์ ๋ ฌ์ ๋ ๋ฒ์ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ค. 0~99 ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ค. ์ฒ์์๋ 1์ ์๋ฆฌ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ซ์๋ฅผ ์ ๋ ฌํ๊ณ ๋ ๋ฒ์งธ๋ 10์ ์๋ฆฌ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ค.
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
this.count = count;
}
function enqueue(element) {
this.dataStore.push(element);
}
function dequeue() {
return this.dataStore.shift();// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ ์ญ์
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
// ๋ชจ๋ ์์ ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr;
}
// ํ๊ฐ ๋น์๋์ง ํ์ธfunction empty() {
if (this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
function count() {
return this.dataStore.length;
}
// @ : ํ๋ก ๋ฐ์ดํฐ ์ ๋ ฌํ๊ธฐ, ๊ธฐ์ ์ ๋ ฌ, 1์ ์๋ฆฌ ๊ธฐ์ค์ผ๋ก ์ซ์ ์ ๋ ฌ ํ 10์ ์๋ฆฌ ๊ธฐ์ค์ผ๋ก ์ซ์ ์ ๋ ฌ. ๊ฐ ์ซ์๋น 1๊ฐ์ ํ์ด๋ฏ๋ก 9๊ฐ์ ํ๊ฐ ํ์ํ๋ค.function distribute(nums, queues, n, digit) {
for (let i = 0; i < n; ++i) {
if (digit === 1) {
queues[nums[i] % 10].enqueue(nums[i]);
} else {
queues[Math.floor(nums[i] / 10)].enqueue(nums[i]);
}
}
}
// @ : ํ์ ์ ์ฅ๋ ์ซ์๋ฅผ ์์งํ๋ ํจ์function collect(queues, nums) {
let i = 0;
for (let digit = 0; digit < 10; ++digit) {
while (!queues[digit].empty()) {
nums[i++] = queues[digit].dequeue();
}
}
}
function dispArray(arr) {
for (let i = 0; i < arr.length; ++i) {
console.log(arr[i] + " ");
}
}
let queues = [];
for (let i = 0; i < 10; ++i) {
queues[i] = new Queue();
}
let nums = [];
for (let i = 0; i < 10; ++i) {
nums[i] = Math.floor(Math.floor(Math.random() * 101));
}
console.log("Before radix sort: ");
dispArray(nums);
distribute(nums, queues, 10, 1);
collect(queues, nums);
distribute(nums, queues, 10, 10);
collect(queues, nums);
console.log("\n\nAfter radix sort: ");
dispArray(nums);
๋๋คํ ์ซ์๋ฅผ ๋ฃ์ด์ ๊ธฐ์์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
5.5 ์ฐ์ ์์ ํ
๋ณดํต ํ์์๋ ๋จผ์ ๋ฃ์ ์์๋ถํฐ ์ญ์ ๋๋ค. ํ์ง๋ง ์ ์
์ ์ถ์ด ์๋๋ผ ์ฐ์ ์์๊ฐ์ ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ์์๋ฅผ ์ญ์ ํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ ์๋ค. ์ด๋ด ๋ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์๊ธ์ค์์๋ ํ์์ ์ํ๋ฅผ ํ๊ฐํด ์ฐ์ ์์ ์ฝ๋๋ฅผ ๋ถ์ฌํ๋ค. ์ฐ์ ์์๊ฐ ๋์ ์ฝ๋๋ฅผ ๋ฐ์ ํ์๋ ์ฐ์ ์์๊ฐ ๋ฎ์ ์ฝ๋๋ฅผ ๋ฐ์ ํ์๋ณด๋ค ๋จผ์ ์ง๋ฃ๋ฅผ ๋ฐ๋๋ค. ํ์ง๋ง ๊ฐ์ ์ฐ์ ์์ ์ฝ๋์ธ ๊ฒฝ์ฐ ์ ์
์ ์ถ ๊ท์น์ ์ ์ฉํ๋ค.
code๋ ์ฐ์ ์์๋ฅผ ๋ํ๋ด๋ฉฐ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ 1, 2, 3, 4,,, ์์์ด๋ค.(์ซ์๊ฐ ๋ฎ์์๋ก ์ฐ์ ์์๋ ๋๋ค)
dequeue ํจ์๋ฅผ ์์ ํ์ฌ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์ฝ๋๋ฅผ ์ฐพ๋๋ค.
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
this.count = count;
}
function enqueue(element) {
this.dataStore.push(element);
}
function dequeue() {
return this.dataStore.shift();// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ ์ญ์
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
// ๋ชจ๋ ์์ ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr;
}
// ํ๊ฐ ๋น์๋์ง ํ์ธfunction empty() {
if (this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
function count() {
return this.dataStore.length;
}
// # : ์ฐ์ ์์ ํ// # : ์์ง ๊ฐํธ์ฌ๊ฐ ํ์ ๊ฒ์ฌ >> ํ์์ํํ๊ฐ๋ก ์ฐ์ ์์ ์ฝ๋ ๋ถ์ฌ >> ์ฐ์ ์์ ๋์ผ๋ฉด ๋จผ์ ์ง๋ฃ๋ฐ์(์ฐ์ ์์ ์ฝ๋๊ฐ ๊ฐ์ผ๋ฉด ์ ์
์ ์ถ)function Patient(name, code) {
this.name = name;
this.code = code;// ์ฐ์ ์์ or ์ฌ๊ฐ์ฑ
}
// # : ๊ฐ์ฅ ๋์ ์ฐ์ ์์(1 > 2 > 3 > 4 > ,,,) ์ญ์ function dequeue() {
let entry = 0;
for (let i = 0; i < this.dataStore.length; ++i) {
if (this.dataStore[i].code < this.dataStore[entry].code) {
console.log(
"deq",
this.dataStore[i].code,
this.dataStore[entry].code
);
entry = i;
console.log("ent: ", entry);
}
}
return this.dataStore.splice(entry, 1);
}
// # : ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr +=
this.dataStore[i].name + " code: " + this.dataStore[i].code + "\n";
}
return retStr;
}
// # : worklet p = new Patient("Smith", 5);
let ed = new Queue();
ed.enqueue(p);
p = new Patient("Jones", 4);
ed.enqueue(p);
p = new Patient("Fehrenbach", 6);
ed.enqueue(p);
p = new Patient("Brown", 1);
ed.enqueue(p);
p = new Patient("Ingram", 1);
ed.enqueue(p);
console.log(ed.toString());
let seen = ed.dequeue();
console.log("Patient being treated: " + seen[0].name);
console.log("Patients waiting to be seen: ");
console.log(ed.toString());
// ๋ค์ ํ์ ์น๋ฃ
seen = ed.dequeue();
console.log("Patient being treated: " + seen[0].name);
console.log("Patients waiting to be seen: ");
console.log(ed.toString());
seen = ed.dequeue();
console.log("Patient being treated: " + seen[0].name);
console.log("Patients waiting to be seen: ");
console.log(ed.toString());
5.6 ์ฐ์ต๋ฌธ์
# 1. Queue ํด๋์ค๋ฅผ ๊ณ ์ณ์ Deque ํด๋์ค๋ฅผ ๋ง๋์์ค. Deque๋ ํ์ ๋น์ทํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ฆฌ์คํธ์ ์๋ถ๋ถ๊ณผ ๋๋ถ๋ถ ๋ชจ๋์์ ์์์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ ์ผ์ด๋๋ค. ํ๋ก๊ทธ๋จ์ ์ด์ฉํด ๊ตฌํํ Deque ํด๋์ค๋ฅผ ํ
์คํธํ์์ค.
push_front ๋ ๋งจ ์ ์ธ๋ฑ์ค(0)์ ์์๋ฅผ ์ถ๊ฐํ๊ฒ๋ splice ๋ฉ์๋๋ฅผ ์ด์ฉํด ๊ตฌํํ์๊ณ pop_back ์ length ํ๋กํผํฐ๋ฅผ ์ด์ฉํด์ ๋งจ ๋ค์ ์์์ ์ธ๋ฑ์ค๋ฅผ length-1๋ก ๊ฐ์ ธ์์ ํด๋น ์์น์ ์์๋ฅผ 1๊ฐ ์ง์ฐ๋๋ก splice ๋ฉ์๋๋ฅผ ์ด์ฉํด ๊ตฌํํ์๋ค.
// # : # 1. Queue ํด๋์ค๋ฅผ ๊ณ ์ณ์ Deque ํด๋์ค๋ฅผ ๋ง๋์์ค.// # : Deque๋ ํ์ ๋น์ทํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ฆฌ์คํธ์ ์๋ถ๋ถ๊ณผ ๋๋ถ๋ถ ๋ชจ๋์์ ์์์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ ์ผ์ด๋๋ค.// # : ํ๋ก๊ทธ๋จ์ ์ด์ฉํด ๊ตฌํํ Deque ํด๋์ค๋ฅผ ํ
์คํธํ์์ค.function Deque() {
this.dataStore = [];
this.push_front = push_front;
this.push_back = push_back;
this.pop_front = pop_front;
this.pop_back = pop_back;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
// # : push_front() : ๋งจ ์์ ์๋ก์ด ์์๋ฅผ ์ฝ์
ํ๋ค.// # : push_back() : ๋งจ ๋ค์ ์๋ก์ด ์์๋ฅผ ์ฝ์
ํ๋ค.// # : pop_front() : ๋งจ ์์ ์์๋ฅผ ์ ๊ฑฐํ๋ค.// # : pop_back() : ๋งจ ๋ค์ ์์๋ฅผ ์ ๊ฑฐํ๋ค.// ! : splice(๋งจ ์ ์ธ๋ฑ์ค, 0, ์ถ๊ฐํ๋ ค๋ ์์)๋ฅผ ์ด์ฉํ๋ค. ๋ ๋ฒ์งธ ์ธ์์ ๊ธธ์ด๋งํผ ์ญ์ ํ์ง๋ง 0์ด๋ฉด ์ถ๊ฐ.function push_front(element) {
this.dataStore.splice(0, 0, element);
}
function push_back(element) {
this.dataStore.push(element);
}
function pop_front() {
return this.dataStore.shift();// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ ์ญ์
}
// ! : backํจ์์์ length-1์ ์ฌ์ฉํ๋ฏ ๋งจ ๋ค์ ์์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ธ์์ ํด๋น ์ธ๋ฑ์ค๋ฅผ splice๋ก ์ญ์ ํ๋ค.function pop_back() {
return this.dataStore.splice(this.dataStore.length - 1, 1);// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ 1๊ฐ ์ญ์
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
// ๋ชจ๋ ์์ ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr;
}
// ํ๊ฐ ๋น์๋์ง ํ์ธfunction empty() {
if (this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
let dq = new Deque();
dq.push_front("M");
dq.push_front("C");
dq.push_front("J");
console.log(dq.toString());
dq.pop_front();
console.log(dq.toString());
dq.pop_back();
console.log(dq.toString());
dq.push_back("A");
dq.push_back("B");
console.log(dq.toString());
console.log("Front of dequeue: " + dq.front());
console.log("Back of dequeue: " + dq.back());
# 2. 1๋ฒ์์ ๊ตฌํํ Deque ํด๋์ค๋ฅผ ์ด์ฉํด ์ฃผ์ด์ง ๋จ์ด๊ฐ ํ๋ฌธ์ธ์ง ๊ฒ์ฌํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค.
// # : # 2. 1๋ฒ์์ ๊ตฌํํ Deque ํด๋์ค๋ฅผ ์ด์ฉํด ์ฃผ์ด์ง ๋จ์ด๊ฐ ํ๋ฌธ์ธ์ง ๊ฒ์ฌํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค.function Deque() {
this.dataStore = [];
this.push_front = push_front;
this.push_back = push_back;
this.pop_front = pop_front;
this.pop_back = pop_back;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
function push_front(element) {
this.dataStore.splice(0, 0, element);
}
function push_back(element) {
this.dataStore.push(element);
}
function pop_front() {
return this.dataStore.shift();// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ ์ญ์
}
function pop_back() {
return this.dataStore.splice(this.dataStore.length - 1, 1);// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ 1๊ฐ ์ญ์
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
// # : ๋ฌธ์์ด์ด ํ์ค๋ก ๋์ค๋๋ก ์์ function toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i];
}
return retStr;
}
function empty() {
if (this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
function palindrome(str) {
let dq = new Deque();
for (let i = 0; i < str.length; ++i) {
dq.push_front(str[i]);
}
console.log(dq.toString());
if (str === dq.toString()) {
console.log("ํ๋ฌธ์
๋๋ค.");
} else {
console.log("ํ๋ฌธ ์๋๋๋ค.");
}
}
palindrome("reaer");
palindrome("alsdjfalsdjf");
palindrome("racecar");
palindrome("hello");
# 3. 5.5์ ์ฐ์ ์์ ํ ์์ ์์ ๋ฎ์ ์๊ฐ ์๋๋ผ ๋์ ์ซ์๋ฅผ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ก ํ๋ก๊ทธ๋จ์ ๊ณ ์น์์ค. ํ
์คํธ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ์์ค.
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
this.count = count;
}
function enqueue(element) {
this.dataStore.push(element);
}
function dequeue() {
return this.dataStore.shift();// ๋ฐฐ์ด ์๋ถ๋ถ์ ์ ์ฅ๋ ์์๋ฅผ ์ญ์
}
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
// ๋ชจ๋ ์์ ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr;
}
// ํ๊ฐ ๋น์๋์ง ํ์ธfunction empty() {
if (this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
function count() {
return this.dataStore.length;
}
// # : ์ฐ์ ์์ ํ// # : ์์ง ๊ฐํธ์ฌ๊ฐ ํ์ ๊ฒ์ฌ >> ํ์์ํํ๊ฐ๋ก ์ฐ์ ์์ ์ฝ๋ ๋ถ์ฌ >> ์ฐ์ ์์ ๋์ผ๋ฉด ๋จผ์ ์ง๋ฃ๋ฐ์(์ฐ์ ์์ ์ฝ๋๊ฐ ๊ฐ์ผ๋ฉด ์ ์
์ ์ถ)function Patient(name, code) {
this.name = name;
this.code = code;// ์ฐ์ ์์ or ์ฌ๊ฐ์ฑ
}
// ! : ๊ฐ์ฅ ๋์ ์ฐ์ ์์(,,, > 4 > 3 > 2 > 1) ์ญ์ function dequeue() {
let entry = 0;
for (let i = 0; i < this.dataStore.length; ++i) {
if (this.dataStore[i].code > this.dataStore[entry].code) {
console.log(
"deq",
this.dataStore[i].code,
this.dataStore[entry].code
);
entry = i;
console.log("ent: ", entry);
}
}
return this.dataStore.splice(entry, 1);
}
// # : ์ถ๋ ฅfunction toString() {
let retStr = "";
for (let i = 0; i < this.dataStore.length; ++i) {
retStr +=
this.dataStore[i].name + " code: " + this.dataStore[i].code + "\n";
}
return retStr;
}
// # : worklet p = new Patient("Smith", 5);
let ed = new Queue();
ed.enqueue(p);
p = new Patient("Jones", 4);
ed.enqueue(p);
p = new Patient("Fehrenbach", 6);
ed.enqueue(p);
p = new Patient("Brown", 1);
ed.enqueue(p);
p = new Patient("Ingram", 1);
ed.enqueue(p);
console.log(ed.toString());
let seen = ed.dequeue();
console.log("Patient being treated: " + seen[0].name);
console.log("Patients waiting to be seen: ");
console.log(ed.toString());
// ๋ค์ ํ์ ์น๋ฃ
seen = ed.dequeue();
console.log("Patient being treated: " + seen[0].name);
console.log("Patients waiting to be seen: ");
console.log(ed.toString());
seen = ed.dequeue();
console.log("Patient being treated: " + seen[0].name);
console.log("Patients waiting to be seen: ");
console.log(ed.toString());
(ํ์ด๋ณด๊ธฐ)# 4. ์ฌ์ฉ์๊ฐ ์๊ธ์ค์ ํ๋์ ์ ์ดํ ์ ์๋๋ก ์๊ธ์ค ์์ (5.5)๋ฅผ ๊ณ ์น์์ค. ์ฌ์ฉ์๊ฐ ๋ค์๊ณผ ๊ฐ์ ํ๋์ ์ ํํ ์ ์๋๋ก ์์คํ
๋ฉ๋ด๋ฅผ ๋ง๋ค์ด ์ ๊ณตํ์์ค.
a. ํ์๊ฐ ์๊ธ์ค์ ๋ค์ด์ด.
b. ์์ฌ๊ฐ ํ์๋ฅผ ๊ฒ์ฌํจ.
c. ๋๊ธฐ ํ์ ๋ชฉ๋ก์ ์ถ๋ ฅํจ.