210606 ์ผ์์ผ 13~14์ผ์ฐจ
(์ธํดํ๋ฉด์ ํด๊ทผ ํ ์กฐ๊ธ์ฉ ์คํฐ๋ํ๊ณ ์ผ์์ผ์ ๋ณต์ตํ๋ฉด์ ์ง๋๋ฅผ ๋๊ฐ)
# 12~13์ผ์ฐจ ๋ณต์ต
CH6 ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ๋ฐฐ์ด์ ๋จ์ : ๋๋ถ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๋ฐฐ์ด์ด ๊ฝ ์ฐจ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋๋ ๋๋จธ์ง ์์๋ฅผ ์ด๋ํด์ผ ํ๋ฏ๋ก ์ด๋ ค์์ด ๋ฐ๋ฅธ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐฐ์ด์ split()์ ์ด์ฉํ๋ฉด ๊ฐ๋จํ๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ผ์ C++์ด๋ ์๋ฐ๋ณด๋ค ๋ฐฐ์ด์ ํจ์จ์ด ๋จ์ด์ง๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด์ด ๋๋ฌด ๋๋ฆฌ๋ค๊ณ ํ๋จ๋๋ฉด ์ฌ์ฉํ ์ ์๋ค. ๋ค๋ง ์์์ ์์์ ์ ๊ทผํด์ผ ํ ๋๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ณด๋ค ๋ฐฐ์ด์ด ๋ซ๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ์ : node๋ผ ๋ถ๋ฆฌ๋ ๊ฐ์ฒด๊ฐ ๋ชจ์ฌ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ค. ๊ฐ ๋ ธ๋๋ ๊ฐ์ฒด ๋ ํผ๋ฐ์ค๋ฅผ ํตํด ๋ฆฌ์คํธ์ ๋ค๋ฅธ ๋ ธ๋์ ์ฐ๊ฒฐ๋๋ค. ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์ฐธ์กฐํ๋ ๋ ํผ๋ฐ์ค๋ฅผ Link๋ผ๊ณ ํ๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์๋ ๋ค๋ฅธ ์์์์ ๊ด๊ณ๋ฅผ ํตํด ์ํ๋ ์์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, Bread๊ฐ ๋ ๋ฒ์งธ ์์น์ ์๋ค๋ผ๊ณ ํํํ๋ ๊ฒ์ด ์๋๋ผ "Milk" ๋ค์์ "Bread"๊ฐ ์๋ค๋ผ๊ณ ํํํ๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์๋ ์ฒซ ๋ฒ์งธ ๋ ธ๋์์ ๋ง์ง๋ง ๋ ธ๋๋ก ์ด๋ํ๋ ๋ฐฉ์์ผ๋ก ์ ์ฒด ์์๋ฅผ ํ์ธํ ์ ์๋ค.
- ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ฝ์ ํ๋ ค๋ ๋ ธ๋์ ์ด์ ๋ ธ๋ ๋งํฌ๊ฐ ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ฐ๊ฟ์ผ ํ๊ณ ์ ๋ ธ๋์ ๋งํฌ๋ ์ด์ ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ค์ ํด์ผ ํ๋ค.
- ํญ๋ชฉ์ ์ญ์ ํ ๋๋ ์ญ์ ํ๋ ค๋ ๋ ธ๋์ ์ด์ ์ ์๋ ๋ ธ๋ ๋งํฌ๋ฅผ ์ญ์ ํ๋ ค๋ ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ก ๋ฐ๊พผ ๋ค์, ์ญ์ ํ๋ ค๋ ๋ ธ๋์ ๋งํฌ๋ฅผ NULL๋ก ์ค์ ํ๋ฉด ๋ ธ๋๊ฐ ์ญ์ ๋๋ค.
- Node ํด๋์ค
// # : ๋
ธ๋ ํด๋์คfunction Node(element) {
this.element = element;
this.next = null;
}
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํด๋์ค
// # : ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํด๋์คfunction LList() {
this.head = new Node("head");
this.find = find;
this.insert = insert;
this.findPrevious = findPrevious;
this.remove = remove;
this.display = display;
}
LList ํด๋์ค๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. LList ํด๋์ค๋ ์ ๋
ธ๋์ ์ฝ์
, ๊ธฐ์กด ๋
ธ๋์ ์ญ์ , ๋ฆฌ์คํธ์ ํน์ ๋ฐ์ดํฐ ๊ฒ์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์์ฑ์ ํจ์๋ ์ ๊ณตํ๋ค. ์ด๊ธฐ์๋ head์ next ํ๋กํผํฐ๋ฅผ null๋ก ์ค์ ํ๋ค. ๋ฆฌ์คํธ์ ๋
ธ๋๊ฐ ์ถ๊ฐ๋๋ฉด next ํ๋กํผํฐ ๊ฐ์ ๋ฐ๊พผ๋ค.
- ์๋ก์ด ๋ ธ๋ ์ฝ์ ํ๊ธฐ
์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๊ธฐ์กด ๋
ธ๋๋ฅผ ์ฐพ์์ผ ํ๋ค. ๋ฐ๋ผ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๋
ธ๋๋ฅผ ๊ฒ์ํ๋ ํฌํผ ํจ์ find()๋ฅผ ๊ตฌํํ๋ค.
// # : ์๋ก์ด ๋
ธ๋ ์ถ๊ฐํ๊ธฐ : ๊ธฐ์กด ๋
ธ๋ ๋ค๋ผ๊ณ ๊ฐ์ , ๊ธฐ์กด ๋
ธ๋๋ฅผ ์ฐพ์์ผ ํ๋ค.(find) ์ฐพ์ผ๋ฉด ํด๋น ๋
ธ๋๋ฅผ ๋ฐํํ๋ค.function find(item) {
let currNode = this.head;
// ! : ์ฐ์ ์ ๋
ธ๋๋ฅผ ๋ง๋ค๊ณ head ๋
ธ๋๋ก ์ค์ while (currNode.element !== item) {
// ! : ๋ค์ ๋
ธ๋๋ก ๋ฐ๋ณต ์ด๋ํ๋ฉด์ ํ์ฌ ๋
ธ๋์ element ํ๋กํผํฐ๊ฐ ํ์ํ๋ ค๋ ๊ฐ๊ณผ ๊ฐ์ ๊ฐ์ ํฌํจํ๋์ง ํ์ธํ๋ค.// ! : ๊ธฐ์กด ๋
ธ๋๋ฅผ ์ฐพ์ผ๋ฉด ์ ๋
ธ๋์ next ํ๋กํผํฐ๋ฅผ ๊ธฐ์กด ๋
ธ๋์ next ํ๋กํผํฐ์ ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
currNode = currNode.next;
}
return currNode;
}
function insert(newElement, item) {
let newNode = new Node(newElement);
let current = this.find(item);
newNode.next = current.next;
newNode.previous = current;
current.next = newNode;
}
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์๋ฅผ ์ถ๋ ฅํ๋ ํจ์
function display() {
let currNode = this.head;
while (!(currNode.next === null)) {
console.log(currNode.next.element);
currNode = currNode.next;
}
}
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋ ธ๋ ์ญ์ ํ๊ธฐ
๋
ธ๋๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋ฐ๋ก ์ด์ ๋
ธ๋๋ฅผ ์ฐพ์์ผ ํ๋ค. ์ด์ ๋
ธ๋๋ฅผ ์ฐพ์ผ๋ฉด ์ด์ ๋
ธ๋์ next ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ ค๋ ๋
ธ๋์ ๋ค์ ๋
ธ๋๋ก ์ค์ ํด์ผ ํ๋ค. findPrevious()๋ ๋ค์ ๋
ธ๋์์ ์ญ์ ํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉด ํ์์ ๋ฉ์ถ๋ค. ์ญ์ ํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๋
ธ๋์ ์ด์ ๋
ธ๋๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋์ผ๋ง ์ด์ ๋
ธ๋์ next ํ๋กํผํฐ๋ฅผ ๊ณ ์น ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
// # : ์ฐ๊ฒฐ๋ฆฌ์คํธ์์ ๋
ธ๋ ์ญ์ ํ๋ ค๋ฉด ์ญ์ ํ๋ ค๋ ๋ฐ๋ก ์ด์ ๋
ธ๋๋ฅผ ์ฐพ์์ผ ํ๋ค. ์ด์ ๋
ธ๋๋ฅผ ์ฐพ์์ผ๋ฉด ์ด์ ๋
ธ๋์ next๋ฅผ ์ญ์ ํ๋ ค๋ ๋
ธ๋์ ๋ค์ ๋
ธ๋๋ก ์ค์ ํด์ผ ํ๋ค.function findPrevious(item) {
let currNode = this.head;
while (!(currNode.next === null) && currNode.next.element !== item) {
currNode = currNode.next;
}
return currNode;
}
function remove(item) {
let prevNode = this.findPrevious(item);
if (!(prevNode.next === null)) {
prevNode.next = prevNode.next.next;
}
}
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ญ๋ฐฉํฅ์ผ๋ก ๋
ธ๋๋ฅผ ํ์ํ๋ ๊ฒ์ด ์ฝ์ง ์๋ค. ๋
ธ๋์ ์ด์ ๋
ธ๋์ ๋งํฌ๋ฅผ ์ ์ฅํ๋ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค. ํ์ง๋ง ๋งํฌ๋ฅผ ์ถ๊ฐํ๋ฉด ๋
ธ๋๋ฅผ ์ถ๊ฐํ ๋ ๋ ๋ง์ ์์
์ ํด์ผ ํ๋ค. ๋์ ๋
ธ๋๋ฅผ ์ญ์ ํ ๋๋ ๋์ด์ ์ด์ ๋
ธ๋๋ฅผ ์ฐพ์ ํ์๊ฐ ์์ด ์ข๋ ๊ฐ๋จํด์ง๋ค.
function Node(element) {
this.element = element;
this.next = null;
this.previous = null;
}
- insert() :
์ ๋
ธ๋์ previous ํ๋กํผํฐ๋ฅผ ์ด์ ๋
ธ๋๋ก ์ค์ ํด์ผ ํ๋ค.
function insert(newElement, item) {
let newNode = new Node(newElement);
let current = this.find(item);
newNode.next = current.next;
newNode.previous = current;
current.next = newNode;
}
- remove() : ๋จผ์ ์ญ์ ํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๋ ธ๋๋ฅผ ์ฐพ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ญ์ ํ๋ ค๋ ๋ ธ๋ ์ด์ ๋ ธ๋์ next ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ ค๋ ๋ ธ๋์ next ๊ฐ์ผ๋ก ํ๊ณ , ์ญ์ ํ๋ ค๋ ๋ ธ๋ ๋ค์ ๋ ธ๋์ previous ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ ค๋ ๋ ธ๋์ previous ๊ฐ์ผ๋ก ๊ฐ๊ฐ ์ค์ ํ๋ค.
function remove(item) {
let currNode = this.find(item);
if (!(currNode.next === null)) {
currNode.previous.next = currNode.next;
currNode.next.previous = currNode.previous;
currNode.next = null;
currNode.previous = null;
}
}
- findLast() : ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ ธ๋๋ก ์ด๋ํ๋ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ด์ฉํด ์ญ์์ผ๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
// # : ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ "๋ง์ง๋ง ๋
ธ๋๋ก ์ด๋ํ๋ ์ ํธ๋ฆฌํฐ ํจ์"๋ฅผ ์ด์ฉํด ์ญ์์ผ๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ ๋์์ ์ํํ ์ ์๋ค.function findLast() {
let currNode = this.head;
while (!(currNode.next === null)) {
currNode = currNode.next;
}
return currNode;
}
- dispReverse() : ์ญ์์ผ๋ก ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ ์ถ๋ ฅ
// # : ์ญ์์ผ๋ก ์๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์์ ์ถ๋ ฅfunction dispReverse() {
let currNode = this.findLast();
while (!(currNode.previous === null)) {
console.log(currNode.element);
currNode = currNode.previous;
}
}
- ์ํํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
์ํํ์ ๋จ๋ฐฉํฅ๊ณผ ๊ฐ์ ์ข
๋ฅ์ ๋
ธ๋๋ฅผ ํฌํจํ๋ค. ์ ์ผํ๊ฒ ๋ค๋ฅธ ์ ์ ์ํํ์ ํค๋์ next ํ๋กํผํฐ๊ฐ ์์ ์ ๊ฐ๋ฆฌํจ๋ค๋ ๊ฒ์ด๋ค. head.next = head;๋ ์ ์ฒด ๋ฆฌ์คํธ์ ์ ์ฉ๋์ด ํญ์ ๋ง์ง๋ง ๋
ธ๋์ next ํ๋กํผํฐ๋ head๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๋ณต์กํ ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ง ์๊ณ ๊ฐ๋จํ๊ฒ ์ญ๋ฐฉํฅ์ผ๋ก ํ์ํ ์ ์๋ค๋ ๊ฒ์ด ๊ฐ์ ์ด๋ค. ๋ ธ๋์ ๋์ ์ง๋ ๊ณ์ ํ์ํ๋ฉด ๊ฒฐ๊ตญ ์ญ๋ฐฉํฅ์ ์๋ ๋ ธ๋๋ก ์ด๋ํ ์ ์๋ค.
function LList() {
this.head = new Node("head");
this.head.next = this.head;
this.find = find;
this.insert = insert;
this.display = display;
this.findPrevious = findPrevious;
this.remove = remove;
}
- display() :ย display() ํจ์๋ ์ํํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ฌ์ฉํ๋ ค๋ฉด while ๋ฃจํ ์คํ ์กฐ๊ฑด์ ํค๋์์ ๋ฉ์ถ๋๋ก ๋ฐ๊ฟ์ผ ํ๋ค.
function display() {
let currNode = this.head;
while (!(currNode.next === null) && !(currNode.next.element == "head")) {
console.log(currNode.next.element);
currNode = currNode.next;
}
}
# 14~15์ผ์ฐจ ํ์ต
CH7 ๋์ ๋๋ฆฌ
๋์
๋๋ฆฌ๋ ์ ํ๋ฒํธ๋ถ์ ์ด๋ฆ๊ณผ ์ ํ๋ฒํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ํค(key)์ ๊ฐ(value) ์์ผ๋ก ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ๋ค. ๋๊ตฐ๊ฐ์ ์ ํ๋ฒํธ๋ฅผ ๊ฒ์ํ๋ ค๋ฉด ๋จผ์ ๊ทธ ์ฌ๋์ ์ด๋ฆ์ ๊ฒ์ํด์ผ ํ๋ค. ์ด๋ฆ์ ์ฐพ์ผ๋ฉด ๊ทธ ์์ ํ์๋ ์ ํ๋ฒํธ๋ฅผ ํ์ธํ ์ ์๋ค. ํค๋ก ๊ฒ์์ ์ํํ๊ณ ๊ฒ์ ๊ฒฐ๊ณผ๋ก ๊ฐ์ ๋ฐํํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ Object ํด๋์ค๋ ๋์
๋๋ฆฌ ํ์์ผ๋ก ๋์ํ๊ฒ ์ค๊ณ๋์๋ค. []๋ณด๋ค๋ ()๋ฅผ ์ด์ฉํด ํค๋ฅผ ์ฐธ์กฐํ๋ ํธ์ด ํจ์ฌ ์ฝ๊ณ ๋์
๋๋ฆฌ์ ๋ชจ๋ ํญ๋ชฉ์ ์ถ๋ ฅ์ํค๋ ์ ์ฉํ ํจ์๋ฅผ ๋ง๋ค์ด ๋์ผ๋ฉด ํธํ๋ฏ๋ก Dictionary ํด๋์ค๋ฅผ ๋ง๋ค๋๋ก ํ๋ค.
7.1 Dictionary ํด๋์ค
๋ด๋ถ์ ์ผ๋ก Object ํด๋์ค๊ฐ ์๋ Array ํด๋์ค๋ฅผ ์ด์ฉํ๋ค. ๋์
๋๋ฆฌ์ ํค๋ฅผ ์ ๋ ฌํด์ผ ํ๋๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ Object ํด๋์ค์ ํ๋กํผํฐ๋ฅผ ์ ๋ ฌํ์ง ๋ชปํ๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ฒด(Object)์ด๋ฏ๋ก ๋ฐฐ์ด ์ญ์ ๊ฐ์ฒด์์ ๊ธฐ์ตํ์.
function Dictionary() {
this.datastore = new Array();
this.add = add;
this.find = find;
this.remove = remove;
this.showAll = showAll;
}
add()๋ ํค์ ๊ฐ์ ๋ฐ๋๋ค. ํค๋ ๊ฐ์ ์ฐพ๋ ๋ฐ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค๋ค.
function add(key, value) {
this.datastore[key] = value;
}
find()๋ ํค๋ฅผ ์ธ์๋ก ๋ฐ์ ํค์ ๊ด๋ จ๋ ๊ฐ์ ๋ฐํํ๋ค
function find(key) {
return this.datastore[key];
}
๋์
๋๋ฆฌ์ ํค์ ๊ฐ ์์ ์ง์ธ ๋๋ ๋ด์ฅ ํจ์ delete๋ฅผ ์ด์ฉํ๋ค. ์ด๋ Objectํด๋์ค์ ์ผ๋ถ๋ฉฐ ์ธ์๋ก ํค ๋ ํผ๋ฐ์ค๋ฅผ ๋ฐ๋๋ค.
function remove(key) {
delete this.datastore[key];
}
๋์
๋๋ฆฌ์ ๋ชจ๋ ํค์ ๊ฐ ์์ ํ์ธํ ์ ์๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค.
function showAll() {
// console.log(Object.keys(this.datastore));for (let key in this.datastore) {
console.log(key + " -> " + this.datastore[key]);
}
}
์ฑ
์์๋ for each ( var key in Object.keys(this.datastore)) {
๋ก ์ ์ธํ์ฌ ์ฌ์ฉํ๋๋ฐ ์ค์ ๋ก Object.keys(this.datastore)๋ฅผ ์ฝ์์ ์ฐ์ด๋ณด๋ [ "Mike", "Cynthia" ] ๋ก ๋์ด ์์ด ์๋์ ์ฝ์ ์ถ๋ ฅ๋ฌธ์๋ ์ ํฉํ์ง ์์๋ค. key๊ฐ "0", "1"๋ก ๋์ค๊ณ this.datastore[key]๋ undefined๋ก ์ถ๋ ฅ๋์๋ค. ๊ทธ๋์ ์ํ๋ ์ถ๋ ฅ๊ฐ์ ์ป๊ธฐ ์ํด์ for in ๋ฌธ์ ์ด์ฉํ์๋ค.
for( let key in this.datastore){ ๋ก ์ ์ธํ ๊ฒฐ๊ณผ this.datastore์ ์กด์ฌํ๋ ํค์ ๊ฐ ์์ ํค ๊ฐ๋ค์ด ํ๋์ฉ ํ์ด๋์ค๊ณ ์ด์ ํด๋นํ๋ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ๊ทธ ๊ฐ์ ์ถ๋ ฅ์์ผ์ฃผ์๋ค.
let pbook = new Dictionary();
pbook.add("Mike", "123");
pbook.add("David", "345");
pbook.add("Cynthia", "456");
console.log("David's extension: " + pbook.find("David"));
pbook.remove("David");
pbook.showAll();
7.2 Dictionary ํด๋์ค์ ๋ถ๊ฐ ํจ์
๋์
๋๋ฆฌ์ ๋ช ๊ฐ์ ํญ๋ชฉ์ด ์ ์ฅ๋์ด ์๋์ง ์๊ธฐ ์ํ count() ํจ์,( length ํ๋กํผํฐ๋ ๋ฌธ์์ด ํค์์๋ ์ ๋๋ก ์๋ํ์ง ์์ ์ฌ์ฉํ์ง ์์๋ค.) ๋ํ ๋ชจ๋ ํญ๋ชฉ์ ์ญ์ ํ๋ clear() ํจ์๋ฅผ ์ถ๊ฐํ๋ค.
function Dictionary() {
this.add = add;
this.datastore = new Array();
this.find = find;
this.remove = remove;
this.showAll = showAll;
this.count = count;
this.clear = clear;
}
function add(key, value) {
this.datastore[key] = value;
}
function find(key) {
return this.datastore[key];
}
function remove(key) {
delete this.datastore[key];
}
function showAll() {
// console.log(Object.keys(this.datastore));for (let key in this.datastore) {
console.log(key + " -> " + this.datastore[key]);
}
}
// # : Count elements in dictionary, length ํ๋กํผํฐ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌธ์์ด ํค์์๋ ์ ๋๋ก ๋์ํ์ง ์๊ธฐ ๋๋ฌธfunction count() {
let n = 0;
for (let key in this.datastore) {
++n;
}
return n;
}
let nums = new Array();
nums[0] = 1;
nums[1] = 2;
console.log(nums.length);
let pbook = new Array();
pbook["David"] = 1;
pbook["Jennifer"] = 2;
console.log(pbook.length);
function clear() {
for (let key in this.datastore) {
delete this.datastore[key];
}
}
let pbook = new Dictionary();
pbook.add("Raymond", "123");
pbook.add("David", "345");
pbook.add("Cynthia", "456");
console.log("Number of entries: " + pbook.count());
console.log("David's extension: " + pbook.find("David"));
pbook.showAll();
pbook.clear();
console.log("Number of entries : " + pbook.count());
7.3 Dictionary ํด๋์ค์ ์ ๋ ฌ ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ
ํค๋ฅผ ์ด์ฉํด ๊ฐ์ ์ป๋ ๊ฒ์ด ๋์
๋๋ฆฌ์ ํต์ฌ ๊ธฐ๋ฅ์ด๋ค. ์ ์ฅ๋ ํญ๋ชฉ์ ์์๋ ์ค์ํ์ง ์๋ค. ํ์ง๋ง ์ ๋ ฌ๋ ์์๋ก ํ์ธํด์ผ ํ ๊ฒฝ์ฐ๊ฐ ์๋ค. sort() ํจ์๊ฐ ์์ผ๋ ๋ฌธ์์ด ํค์์๋ ์๋๋ค. ๋ฐ๋ผ์ ๋ค์ ํ๋ฒ Object.keys()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋๋ฐ ๋ค์ ํ๋ฒ ์ ๋๋ก ์๋ํ์ง ์์ผ๋ฏ๋ก ์์์ key๋ค๋ง ๋ฝ์์ ๋ฐฐ์ด์ ๊ตฌ์ฑํ ๋ค์ for๋ฌธ์์ ์ด key๋ค์ ๋ฝ์ ์ถ๋ ฅ์ํค๋๋ก ๊ตฌํํ์๋ค.
// ํ์ง๋ง ๋ฌธ์์ด ํค๋ ์ด ๋ฐฉ์์ด ๋ถ๊ฐ๋ฅํ๋ค. ์๋ฌด ๊ฒฐ๊ณผ๋ ์ถ๋ ฅ๋์ง ์๋๋ค. Object.keys()๋ฅผ ์ด์ฉํด์ผ ํ๋ค.function showAll() {
this.datastore = Object.keys(this.datastore).sort();// for๋ฌธ ์์์ ๋ฐ๋ก key๋ฅผ ๋นผ๋ฉด sort๊ฐ ์ ์ฉ๋์ง ์์ ์์์ ํ ๋นfor (let key in this.datastore) {
console.log(key + " -> " + this.datastore[key]);
}
}
์ showAll() ๋ฉ์๋๋ฅผ ๋ค์ ์ถ๋ ฅํด๋ณด๋ฉด์ ์๋ชป ๊ตฌํํ๋ค๋ ๊ฒ์ ์๊ณ key๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ ์๋๋ผ ํด๋นํ๋ ์ธ๋ฑ์ค์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ์ผ๋ก ๋ณด์์ for of ๋ฌธ์ ์๋ํด๋ณธ ๊ฒฐ๊ณผ key ๊ฐ์ 0, 1, 2,,,,์ ๊ฐ์ ์ธ๋ฑ์ค ๊ฐ๋ค์ด ๋ค์ด์ค๋ ๊ฒ์ด ์๋๋ผ ํด๋นํ๋ ์ธ๋ฑ์ค์ key๊ฐ์ด ์ ๋๋ก ๋ค์ด์ค๊ณ ์ํ๋ ์ถ๋ ฅ์ ์ป์ ์ ์์๋ค. Object.keys์ Object.values์ ๋ฌธ์ ์ธ์ค ์์๋๋ฐ ์ฑ
์์ ๋์จ for each ๋ฌธ์ด for of๋ฌธ์ผ๋ก ๋์ฒด๋๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์๊ณ for of๋ฌธ์ ๋ํด์ ์ ์์งํ๊ณ ์์ด์ผ ๊ฒ ๋ค.
https://yjshin.tistory.com/entry/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-for-%EB%AC%B8-for-in-%EB%AC%B8-for-of-%EB%AC%B8
https://yjshin.tistory.com/entry/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-for-%EB%AC%B8-for-in-%EB%AC%B8-for-of-%EB%AC%B8
7.4 ์ฐ์ต๋ฌธ์
#1. ํ
์คํธ ํ์ผ์์ ์ด๋ฆ๊ณผ ์ ํ๋ฒํธ๋ฅผ ์ฝ์ด Dictionary ๊ฐ์ฒด์ ์ ์ฅํ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ์์ค. ๋ํ ํน์ ์ ํ๋ฒํธ ์ถ๋ ฅ ๊ธฐ๋ฅ, ๋ชจ๋ ์ ํ๋ฒํธ ์ถ๋ ฅ ๊ธฐ๋ฅ, ์๋ก์ด ์ ํ๋ฒํธ ์ถ๊ฐ ๊ธฐ๋ฅ, ๊ธฐ์กด ์ ํ๋ฒํธ ์ญ์ ๊ธฐ๋ฅ, ๋ชจ๋ ์ ํ๋ฒํธ ์ญ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ค.
#2. Dictionary ํด๋์ค๋ฅผ ์ด์ฉํด ์ด๋ค ํ
์คํธ์์ ๋จ์ด๊ฐ ๋ช ๋ฒ ๋์ค๋์ง๋ฅผ ์ ์ฅํ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ์์ค. ํ๋ก๊ทธ๋จ์ ํ
์คํธ์์ ๊ฐ ๋จ์ด๊ฐ ๋ช ํ ๋์ค๋์ง ํ์ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด 'the brown fox jumped over the blue fox.'๋ฅผ ์
๋ ฅํ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ผ์ผ ํ๋ค.
the : 2
brown: 1
fox : 2
jumped : 1
over : 1
blue : 1
// #2. Dictionary ํด๋์ค๋ฅผ ์ด์ฉํด ์ด๋ค ํ
์คํธ์์ ๋จ์ด๊ฐ ๋ช ๋ฒ ๋์ค๋์ง๋ฅผ ์ ์ฅํ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ์์ค.// ํ๋ก๊ทธ๋จ์ ํ
์คํธ์์ ๊ฐ ๋จ์ด๊ฐ ๋ช ํ ๋์ค๋์ง ํ์ํด์ผ ํ๋ค.// ์๋ฅผ ๋ค์ด 'the brown fox jumped over the blue fox.'๋ฅผ ์
๋ ฅํ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ผ์ผ ํ๋ค.// the : 2// brown: 1// fox : 2// jumped : 1// over : 1// blue : 1function Dictionary() {
this.add = add;
this.datastore = new Array();
this.find = find;
this.remove = remove;
this.showAll = showAll;
}
function add(text) {
textArr = text.substr(0, text.length - 1).split(" ");// ๋ง์นจํ ์ ๊ฑฐ ํ ๋จ์ด ๋จ์๋ก ์๋ฆ
textArr.forEach((word) => {
// ์ฒ์์ ๋ค์ด์๋ ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ ๋ ์ธ๋ฑ์ค์ ์ซ์๋ฅผ ๋ฃ์ด์ผ ๋๋ฏ๋ก// if๋ฌธ์ผ๋ก ์ด๊น๊ฐ undefined์ผ ๊ฒฝ์ฐ 0์ผ๋ก ์ด๊ธฐํํ ๋ค์ ๊ฐ์๋ฅผ ์ถ๊ฐ์์ผ์ค๋ค.if (this.datastore[word] === undefined) {
this.datastore[word] = 0;
}
this.datastore[word] = this.datastore[word] + 1;//value;
});
}
function find(key) {
return this.datastore[key];
}
function remove(key) {
delete this.datastore[key];
}
function showAll() {
for (let key of Object.keys(this.datastore)) {
console.log(key + " -> " + this.datastore[key]);
}
}
let pbook = new Dictionary();
pbook.add("the brown fox jumped over the blue fox.");
pbook.showAll();
#3. 2๋ฒ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํด์ ์ถ๋ ฅํ๋๋ก ํ๋ก๊ทธ๋จ์ ๊ณ ์น์์ค.
// #3. 2๋ฒ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํด์ ์ถ๋ ฅํ๋๋ก ํ๋ก๊ทธ๋จ์ ๊ณ ์น์์ค.// #2. Dictionary ํด๋์ค๋ฅผ ์ด์ฉํด ์ด๋ค ํ
์คํธ์์ ๋จ์ด๊ฐ ๋ช ๋ฒ ๋์ค๋์ง๋ฅผ ์ ์ฅํ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ์์ค.// ํ๋ก๊ทธ๋จ์ ํ
์คํธ์์ ๊ฐ ๋จ์ด๊ฐ ๋ช ํ ๋์ค๋์ง ํ์ํด์ผ ํ๋ค.// ์๋ฅผ ๋ค์ด 'the brown fox jumped over the blue fox.'๋ฅผ ์
๋ ฅํ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ผ์ผ ํ๋ค.// the : 2// brown: 1// fox : 2// jumped : 1// over : 1// blue : 1function Dictionary() {
this.add = add;
this.datastore = new Array();
this.find = find;
this.remove = remove;
this.showAll = showAll;
}
function add(text) {
textArr = text.substr(0, text.length - 1).split(" ");// ๋ง์นจํ ์ ๊ฑฐ ํ ๋จ์ด ๋จ์๋ก ์๋ฆ
textArr.forEach((word) => {
// ์ฒ์์ ๋ค์ด์๋ ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ ๋ ์ธ๋ฑ์ค์ ์ซ์๋ฅผ ๋ฃ์ด์ผ ๋๋ฏ๋ก// if๋ฌธ์ผ๋ก ์ด๊น๊ฐ undefined์ผ ๊ฒฝ์ฐ 0์ผ๋ก ์ด๊ธฐํํ ๋ค์ ๊ฐ์๋ฅผ ์ถ๊ฐ์์ผ์ค๋ค.if (this.datastore[word] === undefined) {
this.datastore[word] = 0;
}
this.datastore[word] = this.datastore[word] + 1;//value;
});
}
function find(key) {
return this.datastore[key];
}
function remove(key) {
delete this.datastore[key];
}
function showAll() {
for (let key of Object.keys(this.datastore).sort()) {
console.log(key + " -> " + this.datastore[key]);
}
}
let pbook = new Dictionary();
pbook.add("the brown fox jumped over the blue fox.");
pbook.showAll();