์ฃผ๊ฐํ๊ณ
๋งค์ฃผ ์ฃผ๊ฐํ๊ณ ์ฐ๊ธฐ ์ฑ๊ณต!
4์ ํ ๋ฌ๊ฐ ํ์ตํ ๊ฒ๋ค
์ค๊ณ์ ์ค์์ฑ
๊ณผ์ 2 : ์์ ์ฎ๊ธฐ๊ธฐ
>>, << : ์ ์ฒด ์์ ์ฎ๊ธฐ๊ธฐ
1์ฐจ
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> select { float: left; width: 70px; height: 100px; } select > option { /* font-size: 30px; */ /* margin: 10px; */ } #buttons { float: left; } #buttons > button{ width: 30px; margin: 0 10px; display: block; } </style> </head> <body> <!-- 1. html ์์ ๊ทธ๋ฆฌ๊ธฐ 1) select ์์ฑ 2) ๋ฒํผ ์์ฑ 3) ์ค๋ฅธ์ชฝ select ์์ฑ --> <select id="sports" multiple> <option id="basketball">๐๋๊ตฌ๐</option> <option id="soccer">โฝ๏ธ์ถ๊ตฌโฝ๏ธ</option> <option id="baseball">โพ๏ธ์ผ๊ตฌโพ๏ธ</option> <option id="volleyball">๐๋ฐฐ๊ตฌ๐</option> </select> <div id="buttons"> <button id="add">></button> <button id="addAll">>></button> <button id="minus"><</button> <button id="minusAll"><<</button> </div> <select id="sports2" multiple></select> </body>
js
<script> const originalSports = document.getElementById('sports'); // ์ผ์ชฝ select(์๋ณธ) const movedSports = document.getElementById('sports2'); // ์ค๋ฅธ์ชฝ select(์ด๋) // ์ ํ ๋ฃ๊ธฐ ๋ฒํผ(add), ์ ํ ๋นผ๊ธฐ ๋ฒํผ(minus) ํฉ์นจ function addOption(event) { const id = event.srcElement.id; // ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์ id๋ฅผ ๊ฐ์ ธ์จ๋ค. // 1. ์ ํํ ์์๋ฅผ ๊ฐ์ ธ์จ๋ค => id๊ฐ add๋ฉด ์ ํํ options๋ฅผ original์์ ๊ฐ์ ธ์ค๊ณ minus๋ฉด ์ ํํ options๋ฅผ moved์์ ๊ฐ์ ธ์จ๋ค. const selectedOptions = id == 'add' ? Array.from(originalSports.selectedOptions) : Array.from(movedSports.selectedOptions); // ์ ํํ ์์๊ฐ ์ด๋๋ select => id๊ฐ add๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ movedSports, id๊ฐ minus๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ originalSports const toBeAdded = id == 'add' ? movedSports : originalSports; // 2. ์ ํํ ์์๋ฅผ ์ด๋์ํจ๋ค. for (let i = 0; i < selectedOptions.length; i++) { toBeAdded.appendChild(selectedOptions[i]); } } // ์ ์ฒด ๋ฃ๊ธฐ ๋ฒํผ(addAll), ์ ์ฒด ๋นผ๊ธฐ ๋ฒํผ(minusAll)ํฉ์นจ function addAllOption(event) { const id = event.srcElement.id; // ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์ id๋ฅผ ๊ฐ์ ธ์จ๋ค. // 1. select์ ๋ชจ๋ option์ ๊ฐ์ ธ์จ๋ค. => id๊ฐ addAll์ด๋ฉด options๋ฅผ original์์ ๊ฐ์ ธ์ค๊ณ minusAll์ด๋ฉด moved์์ ๊ฐ์ ธ์จ๋ค. const options = id == 'addAll' ? Array.from(originalSports.children) : Array.from(movedSports.children); // ์์๊ฐ ์ด๋๋ select => id๊ฐ addAll๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ movdedSports, id๊ฐ minusAll์ด๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ originalSports const toBeAdded = id == 'addAll' ? movedSports : originalSports; // 2. option๋ค์ ์ด๋์ํจ๋ค. for (let i = 0; i < options.length; i++) { toBeAdded.appendChild(options[i]); } } // ์ ํ ์ถ๊ฐ ๋ฒํผ document.getElementById('add').addEventListener("click", addOption); // ์ ํ ๋นผ๊ธฐ ๋ฒํผ document.getElementById('minus').addEventListener("click", addOption); // ์ ์ฒด ์ถ๊ฐ ๋ฒํผ document.getElementById('addAll').addEventListener("click", addAllOption); // ์ ์ฒด ๋นผ๊ธฐ ๋ฒํผ document.getElementById('minusAll').addEventListener("click", addAllOption); </script> </html>
2์ฐจ : 1์ฐจ ์์ฅ๋ ํผ๋๋ฐฑ ํ ๋ค์
const originalSports = document.getElementById('sports'); // ์ผ์ชฝ select(์๋ณธ) const movedSports = document.getElementById('sports2'); // ์ค๋ฅธ์ชฝ select(์ด๋) // ์ ํ๋ option์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. function moveSelectedLeftToRight() { moveSelected(left, right); } // ์ ํ๋ option์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. function moveSelectedRightToLeft() { moveSelected(right, left); } // ๋ชจ๋ option์ ์ฎ๊ธด๋ค. function moveAll(from, to) { // 1. ๋ชจ๋ option์ ์ ํํ๋ค. selectAll(from); // 2. ์ ํ๋ option์ ์ฎ๊ธด๋ค. moveSelected(from, to); } // ์ ํ๋ option์ from์์ to๋ก ์ฎ๊ธด๋ค. function moveSelected(from, to) { } // target์ ๋ชจ๋ option์ function selectAll(target){ }
const leftSelect = document.getElementById('leftSelect'); // ์ผ์ชฝ select(์๋ณธ) const rightSelect = document.getElementById('rightSelect'); // ์ค๋ฅธ์ชฝ select(์ด๋) // ์ ํ๋ option์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. function moveSelectedLeftToRight() { moveSelected(leftSelect, rightSelect); } // ์ ํ๋ option์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. function moveSelectedRightToLeft() { moveSelected(rightSelect, leftSelect); } // ๋ชจ๋ option์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. function moveAllLeftToRight() { moveAll(leftSelect, rightSelect); } // ๋ชจ๋ option์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. function moveAllRightToLeft() { moveAll(rightSelect, leftSelect); } // ๋ชจ๋ option์ ์ฎ๊ธด๋ค. function moveAll(from, to) { // 1. ๋ชจ๋ option์ ์ ํํ๋ค. selectAll(from); // 2. ์ ํ๋ option์ ์ฎ๊ธด๋ค. moveSelected(from, to); } // ์ ํ๋ option์ from์์ to๋ก ์ฎ๊ธด๋ค. function moveSelected(from, to) { const selectedOptions = Array.from(from.selectedOptions); for (let i = 0; selectedOptions.length; i++) { to.appendChild(selectedOptions[i]); } } // target์ ๋ชจ๋ option์ ์ ํํ๋ค. function selectAll(target){ const options = target.children; for (let i = 0; i < options.length; i++) { options[i].selected = true; } }
๋ด๊ฐ ์์ฑํ ์ฝ๋๋ ์ ํํ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฑธ ์ผํญ ์ฐ์ฐ์๋ก ์ฒ๋ฆฌํ ๊ฒ ๋๋ฌธ์ธ์ง ์ฝ๋๊ฐ ์ ํ ํ ๋์ ๋ค์ด์ค์ง ์์๋ค.
์์ฅ๋์ด ์์ฑํด์ฃผ์ ์ฝ๋๋ moveSelectedLeftToRight()์ moveSelectedRightToLeft()๋ฅผ ๋ง๋ค์ด์ moveSelected()์ ์ธ์๋ง ์๋ฆฌ ๋ฐ๊พธ์ด์ ๋ฃ์ด์ฃผ๋๊น ํจ์ ์ฌ์ฌ์ฉ๋ ํ๋ฉด์ ์ด ํจ์๊ฐ ์ด๋ค ๋์, ์ญํ ์ ํ๋์ง ๋ณด์ฌ ํจ์ฌ ์๋๋ฅผ ํ์ ํ๊ธฐ ์ฌ์์ก๋ค.
๊ฐ์ฒด์งํฅ 5์์น์ค ๋จ์ผ ์ฑ ์ ์์นโฆ ์ ํ ์๋ฟ์ง ์์๋๋ฐ ์์ ์ด๋ ๊ณผ์ ํ๋ฉด์ ์ด์ ์ผ ์ดํดํ๋ค. ์ธํฐ๋ท์์ ๋ ๋๋ ์ฃผ์ ๋ฌ์ง ๋ง๋ผ๊ณ ํ๋ ๊ฒ ๋ง๋ ์ ๋๋ ์๋ฆฌ๋ผ๊ณ ์๊ฐํ์๋๋ฐ ์ฃผ์์ด ํ์์์ ์ ๋๋ก ์๋๊ฐ ๋ค ๋ณด์ด๊ณ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ผ๋ ๋ป์ด ์๋์์๊น? ํ๋์ ํจ์๊ฐ ํ๋์ ์ญํ ๋ง ๊ฐ์ง๊ณ ์์ผ๋ ๊ตณ์ด ์ฃผ์์ ๋ฌ์ง ์์๋ ์ฝ๋์ ์๋๋ฅผ ํ์ ํ๊ธฐ ์ฌ์์ก๋ค. ์ด๊ฒ ๋ฐ๋ก ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๊ตฌ๋ํ๊ณ ๊นจ๋ฌ์์ ์ป์ด์ ๋๋ฌด ์ง๋ฆฟํ๋ค..!
์๋๋ ์ ๋ ๋ต์ ์๋ ค์ฃผ์ง ์์ผ์๊ณ ์ค๋ซ๋์ ๊ณ ๋ฏผํด์ ๋๋ง์ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฐพ์๊ฐ๋ผ๊ณ ํ์๋๋ฐ ์ฃผ์ ์ด์ฌํ ๋ฌ์๊ณ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ฌ์ง ใ ใ ใ ใ ? ๊ฐ ๋ณด์ฌ์ ์์ผ๋ก ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ค๊ณ, ๊ตฌํํ๋ผ๊ณ ๊ฐ์ด๋๋ฅผ ์ฃผ์ ๊ฒ ๊ฐ๋ค. ์ฒ์์ ๊ฐ์ด๋ ์ฃผ์ จ์ ๋ ์ ์ง์ง ๊ฐํ๋ง ๋์๋ค. ์ด๋ป๊ฒ ์ ๋ ๊ฒ ๋ฐ๋ก๋ฐ๋ก ์ถ์ํ๋ ์ฝ๋๋ฅผ ๋๋ฑ ์์ฑํ์๋ ๊ฑฐ์ง..? ๋๋ ์ ๋ฐ ๊ณ ์๊ฐ ๋๊ณ ์ถ์ด์๐ฅน
์์ผ๋ก ๊ตต์งํ๊ฒ ๋ด๊ฐ ๋ญ ํ๊ฒ ๋ค ์ฃผ์์ผ๋ก ์ ๊ณ , ๊ทธ ๋จ๊ณ๋ค์ ํจ์ํํ๋ ์ฐ์ต ๊พธ์คํ ํ๊ธฐ! ๊ณ์ ์ผ์ชฝ ์ฒ๋ผ ์ง๊ณ ๋์ ์ต๊ด์ ๊ณ ์น์ง ์์ผ๋ฉด ์์ฅ๋๊ป ๋ฐฐ์ฐ๋ ์๋ฏธ๊ฐ ์๋ค. ์ด๊ฒ๋งํผ์ ํ์คํ ๊ณ ์น๊ณ , ๋ฐ์ ์์ผ์ ๊ฐ์ ธ๊ฐ์ผ ํ๋ค.
// ์ ํ ๋ฃ๊ธฐ ๋ฒํผ(add), ์ ํ ๋นผ๊ธฐ ๋ฒํผ(minus) ํฉ์นจ
function addOption(event) {
const id = event.srcElement.id; // ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์ id๋ฅผ ๊ฐ์ ธ์จ๋ค.
// 1. ์ ํํ ์์๋ฅผ ๊ฐ์ ธ์จ๋ค => id๊ฐ add๋ฉด ์ ํํ options๋ฅผ original์์ ๊ฐ์ ธ์ค๊ณ minus๋ฉด ์ ํํ options๋ฅผ moved์์ ๊ฐ์ ธ์จ๋ค.
const selectedOptions = id == 'add' ? Array.from(originalSports.selectedOptions) : Array.from(movedSports.selectedOptions);
// ์ ํํ ์์๊ฐ ์ด๋๋ select => id๊ฐ add๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ movedSports, id๊ฐ minus๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ originalSports
const toBeAdded = id == 'add' ? movedSports : originalSports;
// 2. ์ ํํ ์์๋ฅผ ์ด๋์ํจ๋ค.
for (let i = 0; i < selectedOptions.length; i++) {
toBeAdded.appendChild(selectedOptions[i]);
}
}
// ์ ์ฒด ๋ฃ๊ธฐ ๋ฒํผ(addAll), ์ ์ฒด ๋นผ๊ธฐ ๋ฒํผ(minusAll)ํฉ์นจ
function addAllOption(event) {
const id = event.srcElement.id; // ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์ id๋ฅผ ๊ฐ์ ธ์จ๋ค.
// 1. select์ ๋ชจ๋ option์ ๊ฐ์ ธ์จ๋ค. => id๊ฐ addAll์ด๋ฉด options๋ฅผ original์์ ๊ฐ์ ธ์ค๊ณ minusAll์ด๋ฉด moved์์ ๊ฐ์ ธ์จ๋ค.
const options = id == 'addAll' ? Array.from(originalSports.children) : Array.from(movedSports.children);
// ์์๊ฐ ์ด๋๋ select => id๊ฐ addAll๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ movdedSports, id๊ฐ minusAll์ด๋ฉด ์์ผ๋ก ์ถ๊ฐ๋ select๊ฐ originalSports
const toBeAdded = id == 'addAll' ? movedSports : originalSports;
// 2. option๋ค์ ์ด๋์ํจ๋ค.
for (let i = 0; i < options.length; i++) {
toBeAdded.appendChild(options[i]);
}
}
const leftSelect = document.getElementById('leftSelect'); // ์ผ์ชฝ select(์๋ณธ)
const rightSelect = document.getElementById('rightSelect'); // ์ค๋ฅธ์ชฝ select(์ด๋)
// ์ ํ๋ option์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค.
function moveSelectedLeftToRight() {
moveSelected(leftSelect, rightSelect);
}
// ์ ํ๋ option์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค.
function moveSelectedRightToLeft() {
moveSelected(rightSelect, leftSelect);
}
// ๋ชจ๋ option์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค.
function moveAllLeftToRight() {
moveAll(leftSelect, rightSelect);
}
// ๋ชจ๋ option์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค.
function moveAllRightToLeft() {
moveAll(rightSelect, leftSelect);
}
// ๋ชจ๋ option์ ์ฎ๊ธด๋ค.
function moveAll(from, to) {
// 1. ๋ชจ๋ option์ ์ ํํ๋ค.
selectAll(from);
// 2. ์ ํ๋ option์ ์ฎ๊ธด๋ค.
moveSelected(from, to);
}
// ์ ํ๋ option์ from์์ to๋ก ์ฎ๊ธด๋ค.
function moveSelected(from, to) {
const selectedOptions = Array.from(from.selectedOptions);
for (let i = 0; selectedOptions.length; i++) {
to.appendChild(selectedOptions[i]);
}
}
// target์ ๋ชจ๋ option์ ์ ํํ๋ค.
function selectAll(target){
const options = target.children;
for (let i = 0; i < options.length; i++) {
options[i].selected = true;
}
}
๊ณผ์ 3 : ์นด๋ ๊ฒ์
show : ๋ชจ๋ ์นด๋ ๋ณด์ฌ์ฃผ๊ธฐ
hide : ๋ชจ๋ ์นด๋ ์จ๊ธฐ๊ธฐ
shuffle : ์นด๋ ์๊ธฐ
๋ ์ฅ์ ์นด๋๋ฅผ ๋ค์ง์์ ๋ ๊ฒ์ ์ฑ๊ณต. ์ผ์นํ์ง ์์ผ๋ฉด ๋ค์ ๋ค์ง์ด์ง๋ค.

์ ์ฒด ์ฝ๋
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> img { width: 120px; height: 180px; cursor: pointer; transition: transform 1s ease; } img:hover { transform: translateY(-30px); outline: black solid 1px; } </style> </head> <body> <button id="showBtn">show</button> <button id="hideBtn">hide</button> <button id="shuffleBtn">shuffle</button> <br><br> <div id="board"> <!-- ์นด๋๋ฅผ ๋ณด์ฌ์ค ๊ณณ --> </div> <script> let cardArr = new Array(52); window.onload = function () { // main ๋ฉ์๋ initGame(cardArr); // ๊ฒ์ ์ด๊ธฐํ // for (let i = 0; i < 10000000000; i++) { // } startGame(cardArr); // ๊ฒ์ ์์ } // show ๋ฒํผ์ ๋๋ฅด๋ฉด ์นด๋๋ฅผ ์ ๋ถ ๋ณด์ฌ์ค๋ค. document.getElementById('showBtn').onclick = function() { flipAll(cardArr, false); }; // hide ๋ฒํผ์ ๋๋ฅด๋ฉด ์นด๋๋ฅผ ์ ๋ถ ์จ๊ธด๋ค. document.getElementById('hideBtn').onclick = function() { flipAll(cardArr, true); }; document.getElementById('shuffleBtn').onclick = function() { initGame(cardArr); startGame(cardArr); }; const A = 1; const J = 12 const Q = 12; const K = 13; const DIAMOND = 1; const CLOVER = 2; const HEART = 3; const SPADE = 4; function Card(number, suit) { //TODO suit๋ number ์ง์ญ๋ณ์ํํ๊ธฐ this.number = number; this.suit = suit; this.isFront = true; } Card.prototype.toString = function() { let suit = ""; let number = ""; switch (this.suit) { case 1: suit = "โ"; break; case 2: suit = "โง"; break; case 3: suit = "โก"; break; case 4: suit = "โ "; break; default: } switch (this.number) { case 1: number = "A"; break; case 11: number = "J"; break; case 12: number = "Q"; break; case 13: number = "K"; break; default: number = this.number + ""; } return suit + number; } // ์นด๋์ ์์ด๋(number + "" + suit)๋ฅผ ๊ฐ์ ธ์จ๋ค. Card.prototype.getId = function() { return this.number + "" + this.suit; } // ๊ฒ์ ์ด๊ธฐํ function initGame() { // 1. card๋ฅผ ๋ด์ ๋ฐฐ์ด์ ๋ง๋ ๋ค. // 2. ๋ฐฐ์ด์ ์ด๊ธฐํํ๋ค. initCard(cardArr); // 3. ๋ฐฐ์ด์ ์๋๋ค. shuffleCard(cardArr); // 4. ์นด๋๋ฅผ div#board์ ๋ณด์ฌ์ค๋ค. showCard(cardArr); // 5. ๊ฐ ์นด๋์ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ค. let imgArr = document.getElementsByTagName("img"); for (let i = 0; i < imgArr.length; i++) { imgArr[i].onclick = cardClick; } return cardArr; } function startGame(cardArr) { // ์นด๋ ์ ๋ถ๋ฅผ ๋ท๋ฉด ๋ณด์ฌ์ค๋ค. flipAll(cardArr, true); } // function printCardArr(cardArr) { // for (let i = 0; i < cardArr.length; i++) { // console.log(cardArr[i].toString()); // } // } // ์นด๋ ๋ฐฐ์ด์ ์ด๊ธฐํํ๋ค. function initCard(cardArr) { let suitChk = 1; let numberChk = 1; for (let i = 0; i < cardArr.length; i++) { cardArr[i] = new Card(numberChk++, suitChk++); if (suitChk > 4) suitChk = 1; // ๋ค์ด์๋ชฌ๋(โ) = 4 ๊ทธ๋ฆผ ์นด๋๊น์ง ๋ง๋ค์์ ๊ฒฝ์ฐ ๋ค์ ์คํ์ด๋(โ ) = 1 ์นด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด 1๋ก ๋ณ๊ฒฝ if (numberChk > 13) numberChk = 1; // K(13)๊น์ง ์นด๋๋ฅผ ๋ง๋ค์์ ๊ฒฝ์ฐ ๋ค์ A(1)๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ ์ํด 1๋ก ๋ณ๊ฒฝ } // ๊ธฐ๋ณธ ์ ๋ ฌ cardArr.sort(cardDefaultSortComparator); } // ์นด๋ ํด๋ฆญ ์ ๋ฐ์๋๋ ์ด๋ฒคํธ function cardClick() { // ์นด๋๋ฅผ ์ฐพ๋๋ค. const card = findCard(this); // 1. ์นด๋๊ฐ ์๋ฉด์ธ์ง ํ์ธํ๋ค. if (isFront(card)) // 1-1. ์๋ฉด์ด๋ฉด return return; // 1-2. ๋ท๋ฉด์ด๋ฉด ๋ค์ง๋๋ค. flip(card); // 2. ๋ค์งํ์๋ ์นด๋๊ฐ 2์ฅ์ธ๊ฐ? const chkTwoCards = checkFrontCardCountTwo(cardArr); if (chkTwoCards) { // 2-1. 2์ฅ์ด๋ผ๋ฉด ๋ ์นด๋์ ์ง์ด ์ผ์นํ๋์ง ์ฒดํฌํ๋ค. checkPair(chkTwoCards); } } // ๊ธฐ๋ณธ ์ ๋ ฌ - 1์์ suit 2์์ ์ซ์ function cardDefaultSortComparator(c, c2) { if (c.suit == c2.suit) { return c.number - c2.number; } else { return c.suit - c2.suit; } } // ์นด๋๋ฅผ ์๋๋ค. function shuffleCard(cardArr) { cardArr = cardArr.sort(() => Math.random() - 0.5); } // ์นด๋๋ฅผ div#board์ ๋ณด์ฌ์ค๋ค. function showCard(cardArr) { // ์ด๋ฏธ์ง ํ์ผ๋ช ๊ตฌํด์ค๋ ๊ณต์ = (number - 1) + (suit - 1) * 13 let c; let result = ""; // 1. ์นด๋์ ๊ฐ์๋งํผ ๋ฐ๋ณต๋ฌธ ๋๋ฆฐ๋ค. for (let i = 0; i < cardArr.length; i++) { // 2. ์นด๋ ๊ฐ์ฒด๋ฅผ ํ๋ ๊ฐ์ ธ์์ <img src="${(c.number - 1) + (c.suit - 1) *13}.png"> c = cardArr[i]; // 3. ์์ ๊ฒฐ๊ณผ๋ฅผ result ๋ฌธ์์ด์ ์ง์ด๋ฃ์ ๋ค // ์ฒ์์ ์นด๋ 10์ด๊ฐ ๋ณด์ฌ์ฃผ๊ณ gameStart()์์ hideํ์ result += `<img src="${(c.number - 1) + (c.suit - 1) *13}.png" id=${c.getId()} data-number="${c.number}" data-suit=${c.suit} data-isFront=true>`; // 12๊ฐ๊ฐ ํ์ค = ๋ง์ฝ i๊ฐ 12๋ผ๋ฉด brํ๊ทธ ๋ฃ์ด์ฃผ๊ธฐ if ((i + 1) % 13 == 0) { result+= `<br>`; } } // 4. div#board์ innerHTML๋ก ๋ฃ์ด์ค๋ค. document.getElementById('board').innerHTML = result; } // card๊ฐ ์๋ฉด์ด๋ฉด true ์๋๋ฉด false๋ฅผ ๋ฐํ // card๋ Card ๊ฐ์ฒด๊ฐ ๋ค์ด์์ผ ํ๋ค. function isFront(card) { return card.isFront; } // ์นด๋๋ฅผ ๋ค์ง๋๋ค. function flip(card, isFront) { // 1. ์นด๋๊ฐ ์๋ฉด์ธ์ง ํ์ธํ๋ค. if (isFront) { // 1-1. ์๋ฉด(๊ทธ๋ฆผ)์ด๋ฉด ๋ท๋ฉด(๋๋ด๊ณฐ)์ ๋ณด์ฌ์ค๋ค. showBack(card); } else { // 1-2. ๋ท๋ฉด(๋๋ด๊ณฐ)์ด๋ฉด ์๋ฉด(๊ทธ๋ฆผ์ ๋ณด์ฌ์ค๋ค.) showFront(card); } } // ์นด๋์ ์๋ฉด์ ๋ณด์ฌ์ค๋ค. function showFront(card) { let cardImg = document.getElementById(card.getId()); cardImg.src = `${(card.number - 1) + (card.suit - 1) *13}.png`; card.isFront = true; } // ์นด๋์ ๋ท๋ฉด(๋๋ด๊ณฐ)์ ๋ณด์ฌ์ค๋ค. function showBack(card) { let cardImg = document.getElementById(card.getId()); cardImg.src = 'bear.png'; card.isFront = false; } // ์นด๋๋ฅผ ๋ชจ๋ ๋ค์ง๋๋ค. function flipAll(cardArr, isFront) { // ์นด๋์ ์ด ๊ฐ์๋งํผ ๋ฐ๋ณต๋ฌธ ๋๋ฉด์ flip(card)๋ฅผ ํธ์ถ for (let i = 0; i < 52; i++) { flip(cardArr[i], isFront); } } // ๋ ์นด๋์ ์ง์ด ์ผ์นํ๋์ง ์ฒดํฌํ๋ค. function checkPair(twoCards) { // ์ง ์ผ์น ๊ธฐ์ค : ์ซ์ ๋์ผ, ์์ ๋์ผ if (twoCards[0].number == twoCards[1].number && Math.abs(twoCards[0].suit - twoCards[1].suit)) { // 2-2. ์ผ์นํ๋ฉด ๊ฒ์ ์ข ๋ฃ setTimeout(function() { alert("์ฑ๊ณต"); }, 500); } else { // 2-3. ์ผ์นํ์ง ์์ผ๋ฉด ํด๋ฆญํ๋ ์นด๋๋ค์ ๋ค์ ๋ค์ง๋๋ค. setTimeout(function() { alert("์คํจ"); // ์๋ ์ ์ ๋ค์ง์ด์ ธ;;;; flipAll(cardArr, true); }, 500); } } // ๋ค์งํ์๋ ์นด๋์ ๊ฐ์๊ฐ 2์ฅ์ธ์ง ์ฒดํฌํ๋ค. function checkFrontCardCountTwo(cardArr) { // cardArr์ length๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ card์ isFront๊ฐ true์ธ ์นด๋์ ๊ฐ์๊ฐ 2๊ฐ๋ฉด true๋ฅผ ๋ฐํํ๋ค. let card; let returnCards = []; for (let i = 0; i < cardArr.length; i++) { card = cardArr[i]; if (card.isFront) returnCards.push(card); } if (returnCards.length == 2) { return returnCards; } else { return false; } } // carImg ์๋ฆฌ๋จผํธ์์ cardArr์ค์ ์ผ์นํ๋ ์นด๋๋ฅผ ์ฐพ๋๋ค. function findCard(cardImg) { const number = parseInt(cardImg.getAttribute('data-number')); const suit = parseInt(cardImg.getAttribute('data-suit')); for (let i = 0; i < cardArr.length; i++) { let card = cardArr[i]; if (card.number == number && card.suit == suit) return card; } } // ๊ตฌ์กฐ ์ก์ ๋ ์ฝ๋ ์ ๋ ์ ๊ธฐ x // show๋ hide๋ ํํธ shupple์ ์๊ธฐ </script> </body> </html>
๊ณผ์ 2๋ฒ์์ ๋ฐฐ์ ๋ ๊ฒ ์ฒ๋ผ ๊ตต์งํ๊ฒ ๋ด๊ฐ ๋ญ ํ๊ฒ ๋ค ์ ์ฐจ๋ฅผ ๋จ๊ณ๋ณ๋ก ์ฃผ์์ผ๋ก ์ ๊ณ , ๊ทธ๊ฑธ ๋ค ์ถ์ ๋ฉ์๋์ฒ๋ผ ์์ฑํ๋ค. ์ ์ฒด์ ์ธ ํ์ด ๋์ฌ ๋๊น์ง ๋ํ ์ผ์ ์ ์ด์ด์ผ๋ ๊ตฌํํ์ง ์์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
๊ทธ๋ฆผ์ผ๋ก ๋น์ ๋ฅผ ํ์๋ฉด, ๋จผ์ ์ ์ฒด์ ์ธ ๋ฐ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์ ์ฑ์์ ํด์ผ ํ๋๋ฐ ๋๋ ์๋งํผ ๋ฐ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ์ฑ์ํ๊ณ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ํด์๋ ๊ฒ(๊ตฌํํ์ง ์ ์ ์ฃผ์ ๋จผ์ ์ ๊ธด ํ์์ง๋ง ๋จธ๋ฆฌ์์์ ๋์ค๋๋๋ก ์ผ๋จ ๋ค ์ ๊ณ ์์ ๋ถ๋ถ๋ถํฐ ์ธ์ธํ๊ฒ ๊ตฌํ์ ํ์๋ค).. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ๋ก ์ฑ์ํ๋ ๋ถ๋ถ์ด ์๋ชป๋๋ฉด ๋์ค์ ๊ณ ์น๊ธฐ ํ๋ค์ด์ง๋ค.
์ ์ฒด์ ์ธ ํ ๋ค ์ง๊ณ ์ด ํ์์ ํจ์๋ฅผ ์ฌ์ด ๊ฒ๋ถํฐ ํ๋ํ๋ ๊ตฌํํด๋๊ฐ๋๊น ์ด๊ฒ ์ด๋ ๊ฒ ์ฌ์ด ๊ฑฐ์๋?๋ผ๋ ์๊ฐ์ด ๋ค์ ๋์๋ค. ์๋ฃํ๊ณ ํผ๋๋ฐฑ ๋ฐ์์ ๋ ์ ์งฐ๋ค๊ณ ์นญ์ฐฌ๋ฐ์๋คโฆ.!!! ๋ ๊ธฐ๋ถ ์กฐ์
window.onload = function () { // main ๋ฉ์๋
initGame(); // ๊ฒ์ ์ด๊ธฐํ
startGame(); // ๊ฒ์ ์์
}
function initGame() {
// 1. card๋ฅผ ๋ด์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
let cardArr = [];
// 2. ๋ฐฐ์ด์ ์ด๊ธฐํํ๊ณ
initCard(cardArr);
// 3. ๋ฐฐ์ด์ ์๋๋ค.
shuffleCard(cardArr);
// 4. ์นด๋๋ฅผ div#board์ ๋ณด์ฌ์ค๋ค.
showCard(cardArr);
// 5. ๊ฐ ์นด๋์ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ค.
let imgArr = document.getElementsByTagName("img");
for (let i = 0; i < imgArr.length; i++) {
imgArr[i].onclick = cardClick;
}
}
// card๊ฐ ์๋ฉด์ด๋ฉด true ์๋๋ฉด false๋ฅผ ๋ฐํ
function isFront(card) {
return false;
}
// ์นด๋๋ฅผ ๋ชจ๋ ๋ค์ง๋๋ค.
function flipAll(cardArr) {
// ์นด๋์ ์ด ๊ฐ์๋งํผ ๋ฐ๋ณต๋ฌธ ๋๋ฉด์ flip(card)๋ฅผ ํธ์ถ
flip(card[0]);
}
// ์นด๋๋ฅผ ๋ค์ง๋๋ค.
function flip(card) {
// 1. ์นด๋๊ฐ ์๋ฉด์ธ์ง ํ์ธํ๋ค.
if(isFront()) {
// 1-1. ์๋ฉด(๊ทธ๋ฆผ)์ด๋ฉด ๋ท๋ฉด(๋๋ด๊ณฐ)์ ๋ณด์ฌ์ค๋ค.
showBack(card);
} else {
// 1-2. ๋ท๋ฉด(๋๋ด๊ณฐ)์ด๋ฉด ์๋ฉด(๊ทธ๋ฆผ์ ๋ณด์ฌ์ค๋ค.)
showFront(card);
}
}
// ์นด๋๋ฅผ ํด๋ฆญํ์ ๋ ๋ฐ์๋๋ ์ด๋ฒคํธ
function cardClick(card) {
let card = this;
// 1. ์นด๋๋ฅผ ์๋ฉด์ธ์ง ํ์ธํ๋ค.
if (isFront(card))
// 1-1. ์๋ฉด์ด๋ฉด return
return;
// 1-2. ๋ท๋ฉด์ด๋ฉด ๋ค์ง๋๋ค.
flip(card);
// 2. ๋ค์งํ์๋ ์นด๋๊ฐ 2์ฅ์ธ๊ฐ?
if (checkCard()) {
// 2-1. 2์ฅ์ด๋ผ๋ฉด ๋ ์นด๋์ ์ง์ด ์ผ์นํ๋์ง ์ฒดํฌํ๋ค.
if (checkPair()) {
// 2-2. ์ผ์นํ๋ฉด ๊ฒ์ ์ข
๋ฃ
alert("์ฑ๊ณต")
} else {
// 2-3. ์ผ์นํ์ง ์์ผ๋ฉด ํด๋ฆญํ๋ ์นด๋๋ค์ ๋ค์ ๋ค์ง๋๋ค.
alert("์คํจ");
flipAll(cardArr);
}
}
}
Javascript
์๋ฐ์ ์ ์ฌํ ๋ถ๋ถ์ ์ ๊ฑฐํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ ๊ณ ์ ํ ํน์ง๋ค์ ํต์ฌ์ผ๋ก ๋ชจ์์ 3์ผ๋ง์ ์์ฑ์ผ๋ก ๋ฐฐ์ ๋ค. ๊ทธ 3์ผ๋์ ใ ใ ใ โฆ.? ๊ณ์ ์ด ํ์ ์ด์์ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ์ง๋๋ ๋ฏธ์น๋ฏ์ด ๋น ๋ฅด๊ณ ๋ณต์ตํ ์๊ฐ์ ๋ถ์กฑํ๋ฐ ๊ทผ๋ฐ ๋ ๋๋ฌด ์ฌ๋ฐ๊ณ โฆโฆโฆ
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ฐ๋ฉด์ ์ฌ๊ธฐ ์ค๊ธธ ์ ํ๊ตฌ๋ ์ ๋ง ์ ํ ์ ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ์ ๋ง ๋ง์ด ํ๋ค. ํผ์์ ์ฑ ๋ณด๋ฉด์ ๊ณต๋ถํ๋ค๋ฉด ์๊ฐ๋ง ๋ญ๋นํ๊ณ ํค๋งค์์ ๊ฒ ๊ฐ์๋ฐ, ์ ์๋๊ป์ ํต์ฌ๋ง ์ง์ด์ ์ค๋ช ํด์ฃผ์๋๊น ๋๋ฌด ์ข์๋ค. ๋จ๊ถ์ฑ ์ ์๋๊ป ๋ฐฐ์ฐ๋๊ฒ ์ ๋ง ์๊ด,,,
์๋ฐ๋ ์ ์ฌํ ๋ถ๋ถ๋ ๋ง์ด ์์๊ณ (๋๋ค๋ ์๋ฐ์์ ์ฐ๋ ๋๋ก ๋๊ฐ์ด ์จ๋ ์๋ํ๋ ์ ๊ธฐํ์ ใ ใ ) ๋ค๋ฅธ ๋ถ๋ถ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ ๋์ผํ ์์ฑ์๋ฅผ ์ฌ์ฉํด์ ์์ฑํด๋ ๋ชจ๋ ๊ฑธ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํ๋กํ ํ์ ์ด๋ผ๋ ๊ฑธ ์จ์ผ ํ๋ค๋ ๊ฒ ์ ๊ธฐํ๋ค. ์ฒ์์ ๋ฐฐ์ธ ๋ ์ข ์ด๋ ค์ ๋๋ฐ ์ดํด๊ฐ ์ ๋๋ฉด ๊ทธ๋ ค๋ณด๋ผ๊ณ ํ์ ์ ์ง์ ๊ทธ๋ ค๋ณด์๋๋ ์กฐ๊ธ์..? ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ๋ค.ย ๋ญ๋ ์ดํด ์ ๋๋ฉด ์ฐ๊ณ ๊ทธ๋ ค๋ณด์ ๋จธ๋ฆฌ์์ผ๋ก ์๊ฐ๋งํ๋ฉด ํด๊ฒฐ๋์ง ์์
์๋ฐ
์๋ฐ์ ์ ์ 12์ฅ~15์ฅ
2๏ธโฃ12์ฅ : ์ง๋ค๋ฆญ์ค, ์ด๊ฑฐํ, ์ ๋ํ ์ด์
3๏ธโฃ13์ฅ : ์ฐ๋ ๋(thread)
4๏ธโฃ14์ฅ : ๋๋ค์ ์คํธ๋ฆผ(Lamda & Stream)
- ์๋ฐ์ ์ ์ 15์ฅ : ์
์ถ๋ ฅ(I/O)
FileStream ์ ๋ฌด๋ฅผ ํ๋ฉด์ ๊ฐ๋์ฉ ๋ณผ ๋๋ ์์๊ณ , ์ง์ ์ฌ์ฉํด๋ณด๊ธฐ๋ ํ์๋๋ฐ, ์๋ฆฌ๋ ๋ชจ๋ฅธ์ฑ ๊ทธ์ ๋ณต๋ถํด์ ์ฌ์ฉํ๋ค๋ณด๋ ์์ฉ์ด ์ ํ ๋์ง ์์๋ค. ํ์ง๋ง ์ด๋ฒ์ ๊ธฐํ๋ฅผ ํตํด ์ฑ ์ ์ ๋ ํ๋ฉด์ ๊ธฐ์ด๋ถํฐ ํ๋์ฉ ์์๊ฐ๋ ๋๋ฌด ํฅ๋ฏธ๋ก์ ๋ค.
์๋ฐ์ ์ ์ 7, 8, 11, 12, 13์ฅ ์น ํ์ ๋ฐฑ์ง ๋ณต์ต
๋ ์ - ์ด๋ป๊ฒ ๊ณต๋ถํ ๊ฒ์ธ๊ฐ
- ์ธ์ถ - ex) ์ํ
- ๊ฐ๊ฒฉ ๋๊ธฐ
ex) ํ๋์ ์นด๋
์ฐ์ต์ด ์๊ฐ์๋ ๋ฐ๋ณต์ด ๋์ง ์์ ์ ๋์ ๊ฐ๊ฒฉ์ด๋ฉด ๋๋ค. but ๋๋ฌด ๋ง์ด ์์ด๋ฒ๋ ค์ ์๋ก ๋ฐฐ์ฐ๋ ์ ์ xx ์ฝ๊ฐ์ ๋ง๊ฐ์ด ์ค์. ์ ์ด๋ ํ๋ฃจ
- ๊ต์ฐจํ๊ธฐ
ํ ๊ฐ์ง ์ฐ์ต์ด ์์ ํ ๋๋๊ธฐ ์ ์ ์ฃผ์ ๋ฅผ ๋ฐ๊พธ์ด์ผ ํ๋ค. ๊ธฐ์ต์ ์ฝ๊ฐ ํ๋ ค์ง๊ฒ ํ๋ฉด ์ธ์ถ์ด ํ๋ค์ด์ง๊ณ ๋ฅ์ํ๊ฒ ๋ฐํํ์ง ๋ชปํ์ง๋ง, ํ ์ธต ๋ ๊น์ด ํ์ตํ๊ฒ ๋๊ณ ๋์ค์ ์์ํ๊ฒ ์ธ์ถํ ์ ์๊ฒ ๋๋ค. โ ์ด๋ก ์ ์ผ๋ก๋ ์๊ฒ ๋๋ฐ ๋ํํ ์ ์ฉํ๋ ๊ฒ ์ ์ ๋๋ค ใ
- ๋ณํ์ฃผ๊ธฐ
- ๋ฐ์ถ : ์ด๋ค ์ผ์ด ์ผ์ด๋ฌ๋๊ฐ? ๋ด๊ฐ ๋ฌด์์ ํ๋๊ฐ? ๊ทธ๊ฒ์ด ์ด๋ค ํจ๋ ฅ์ ๋ฐ์ทจํ๋๊ฐ? โ ํ๊ณ ๋ ๋น์ทํ๋ฏ
- ์ ๊ตํ : ์ด๋ฒ๊ณผ ๋ค๋ฅด๊ฒ ๋ค์์๋ ์ด๋ค ํ๋์ ํ ๊ฒ์ธ๊ฐ? โ ์ ์ฉ์ ์ฐพ๊ธฐ
- ํ์ต๋ฒ์ ๋ํ ์กฐ์ธ์ ๋ฌดํฑ๋๊ณ ๋ฏฟ์ง ์๋ ๊ฒ์ด ์ข๋ค.
CSS
ํ๋ฃจ์ ํ๋์ฉ w3school์ ์๋ how to๋ฅผ ๋ถ์ํ๊ธฐ๋ก ํ๋ค.
์ ๋ฌด๋ฅผ ํ ๋ CSS๋ฅผ ๊ต์ฅํ ์ซ์ดํ์๋๋ฐ, ์ด๋ฒ์ ๋งค์ผ ํ๋์ฉ ๋ถ์ํ๋ฉฐ ๊ณต๋ถํ๋ ์ฌ์ค์ ๋ชจ๋ฅด๋๊น ์ด๋ ค์์ ์ซ์ดํ๋ ๊ฒ์ด์๋ค๋ ๊ฑธ ๊นจ๋ฌ์๋ค. ์ฒ์์๋ ๋ชจ๋ฅด๋ ์์ฑ๋ค์ด ๋ง์์ ๊ฒ ๋จน์์ง๋ง, ์ฐจ๊ทผ์ฐจ๊ทผ ์ฑ ์ฐพ์๊ฐ๋ฉด์ ๊ณต๋ถํ๋ ์๊ฐ๋ณด๋ค ์ด๋ ต์ง ์์๋ค. ์ ์ด๋ ๊ฒ ๋๋ ค์ํ๊ณ ํํผํด์๋์ง.. ์๋ ๊ฒ ๋ง์์ง๋ ๋๋ ค์์ด ์ฌ๋ผ์ง๊ณ ์ฌ๋ฐ๋ค. "์ํ๋ฉด ์ฌ๋ฏธ์๊ณ ๋ชปํ๋ฉด ์ฌ๋ฏธ์๋ค"๋ ๋ง์ด ์ ๋ง ๋ง๋ค.
๋, CSS๋ฅผ ์ฑ ๋ณด๊ณ ๊ฐ๋ ์ ์ธ ๊ฒ๋ง ์ฃผ๊ตฌ์ฅ์ฐฝ ๋ฐฐ์ฐ๋ ๊ฒ๋ณด๋ค๋ w3school์์๋์ด ๋ค ๋ ์ด์์์ด ์๊ณ ์ด๋ฅผ ์ด๊ฑฐ ๊ตฌํํ๊ธฐ ์ํด์ ์ด๋ค CSS ์์ฑ์ ์ฌ์ฉํด์ผ ํ๋์ง๋ฅผ ๊ณต๋ถํ๋ ๊ฑฐ๋ผ ๋ ์ ์๋ฟ๊ณ ์ฌ๋ฐ์๋ค.
w3schools - how to
CSS ์์ฑ
์ด๋ฆ | URL | ๋ ์ง | ์์ฑ ์ผ์ | ํ๊ทธ |
---|---|---|---|---|
margin๊ณผ padding์ ์ฐจ์ด | ์์ฑ | |||
float | ์์ฑ | |||
๋ณํ : transition | ์์ฑ | |||
๋ณํ : transform | ์์ฑ | |||
display | ์์ฑ | |||
visibility | ์์ฑ | |||
border(ํ ๋๋ฆฌ) | ์์ฑ | |||
overflow ์์ฑ | ์์น์์ฑ | |||
position ์์ฑ | ์์น์์ฑ | |||
css ์ ํ์ | ์ ํ์ | |||
๊ตฌ์กฐ ์ ํ์ | ์ ํ์ | |||
๋ฌธ์ ์ ํ์ | ์ ํ์ | |||
๋์ ์ ํ์ | ์ ํ์ | |||
@media ๊ท์น | ๋ฐ์ํ ์น | |||
๋ฐ์ํ ์น | ๋ฐ์ํ ์น | |||
Ch5. ์น ํ์ด์ง ๋ ์ด์์ | Ch5. ์น ํ์ด์ง ๋ ์ด์์ | |||
Ch.8 ์์ ์ปค๋จธ์ค ๋ฉ์ธ ํ์ด์ง | Ch5. ์น ํ์ด์ง ๋ ์ด์์ | |||
@import ๊ท์น | Ch11. CSS ์ถ๊ฐ ๊ท์น๊ณผ ๋ฐ์ํ ์น | |||
์ ๋ชฉ ์์ | Ch11. CSS ์ถ๊ฐ ๊ท์น๊ณผ ๋ฐ์ํ ์น | |||
์ํ๋ฌธ์ | ๊ธฐํ | |||
CSS ๋ ํผ๋ฐ์ค | https://www.w3schools.com/cssref/index.php | ๊ธฐํ |
์๋ฃ๊ตฌ์กฐ
LinkedList ๊ตฌํ
MyLinkedList.java
/** * 1. Node class ๋ง๋ค๊ธฐ * 2. ๊ธฐ๋ณธ ์์ฑ์ * 3. add ๋ฉ์๋ ์ถ๊ฐ * 4. ํ ์คํธ * 5. ์ง๋ค๋ฆญ ํด๋์ค๋ก ๋ณ๊ฒฝ */ public class MyLinkedList { private class Node { Node next; // ๋ค์ ๋ ธ๋ Object obj; // ๊ฐ private Node(Object obj) { this.obj = obj; } @Override public String toString() { return obj + ""; } } public MyLinkedList() {} private Node firstNode; /** * ๋ฉ์๋๋ช : add * ๊ธฐ๋ฅ : ์ง์ ๋ ๊ฐ์ฒด(o)๋ฅผ ๋ฆฌ์คํธ์ ๋์ ์ถ๊ฐ * ๋ฐํ๊ฐ : ์์ * ๋งค๊ฐ๋ณ์ : Object o */ public void add(Object o) { Node newNode = new Node(o); // Node๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , Node์ obj์ ์ ์ฅ๋ ๊ฐ์ฒด(o)์ ์ฃผ์๊ฐ์ ๋ฃ๋๋ค. if (firstNode == null) { firstNode = newNode; // ์ฒซ ๋ฒ์งธ ๋ ธ๋์ผ ๊ฒฝ์ฐ ๊ฐ๋ง ๋ฃ์ด์ฃผ๊ณ ๋๋ } else { Node lastNode = getLastNode(); // ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ์ ธ์จ๋ค. lastNode.next = newNode; // ๋ง์ง๋ง ๋ ธ๋์ next์ ์๋ก ์์ฑํ Node ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๋ฃ์ด์ค๋ค. } } /** * ๋ฉ์๋๋ช : getLastNode * ๊ธฐ๋ฅ : ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ฐํํ๋ค. * ๋ฐํ๊ฐ : Node * ๋งค๊ฐ๋ณ์ : ์์ */ private Node getLastNode() { Node nextNode = firstNode.next; // nextNode๊ฐ null์ด๋ผ๋ ๊ฒ์ ์ฐ๊ฒฐ๋์ด์๋ node๊ฐ ํ๋๋ฟ์ด๋ผ๋ ๋ป. // ํ๋๋ฐ์ ์์ผ๋๊น firstNode๊ฐ lastNode์ด๋ฏ๋ก firstNode๋ฅผ ๋ฐํํด์ค๋ค. if (nextNode == null) return firstNode; // ๋ง์ง๋ง ๋ ธ๋๋ผ๋ ๊ฒ์ ์ฐธ์กฐ๋ณ์์ next์ ๊ฐ์ด null์ด๋ผ๋ ๊ฒ์ ์๋ฏธํจ. // nextNode.next์ ๊ฐ์ด null์ด ์๋ ๋๊น์ง ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด ๋ง์ง๋ง ๋ ธ๋๋ฅผ ์ป์ ์ ์๋ค. while (nextNode.next != null) { nextNode = nextNode.next; } return nextNode; } @Override public String toString() { if (firstNode == null) return ""; // ์ฐ๊ฒฐ๋์ด์๋ Node๊ฐ ์์ผ๋ฉด ๊ณต๋ฐฑ ๋ฐํ String tmp = firstNode + ""; // ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ๋์ด์๋ ๋ชจ๋ obj ๊ฐ์ ๋ํ๊ธฐ ์ํ ๋ณ์ Node nextNode = firstNode.next; // nextNode๊ฐ null์ด๋ผ๋ ๊ฒ์ ์ฐ๊ฒฐ๋์ด์๋ node๊ฐ ํ๋ ๋ฟ์ด๋ผ๋ ๋ป. ํ๋๋ฐ์ ์์ผ๋๊น firstNode์ obj๊ฐ๋ง ๋ฐํํด์ค๋ค. if (nextNode == null) return tmp; tmp += (", " + nextNode); while (nextNode.next != null) { nextNode = nextNode.next; tmp += (", " + nextNode); } return tmp; } }
MyLinkedListGeneric.java (์ง๋ค๋ฆญ ํด๋์ค๋ก ๋ณ๊ฒฝ)
/** * 1. Node class ๋ง๋ค๊ธฐ * 2. ๊ธฐ๋ณธ ์์ฑ์ * 3. add ๋ฉ์๋ ์ถ๊ฐ * 4. ํ ์คํธ * 5. ์ง๋ค๋ฆญ ํด๋์ค๋ก ๋ณ๊ฒฝ * Object๋ฅผ ํ์ ๋ณ์๋ก ๋ณ๊ฒฝ */ public class MyLinkedListGeneric<E> { private class Node<E> { Node<E> next; // ๋ค์ ๋ ธ๋ E obj; // ๊ฐ private Node(E obj) { this.obj = obj; } @Override public String toString() { return obj + ""; } } public MyLinkedListGeneric() {} private Node<E> firstNode; /** * ๋ฉ์๋๋ช : add * ๊ธฐ๋ฅ : ์ง์ ๋ ๊ฐ์ฒด(o)๋ฅผ ๋ฆฌ์คํธ์ ๋์ ์ถ๊ฐ * ๋ฐํ๊ฐ : ์์ * ๋งค๊ฐ๋ณ์ : Object o */ public void add(E e) { Node<E> newNode = new Node(e); // Node๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , Node์ obj์ ์ ์ฅ๋ ๊ฐ์ฒด(o)์ ์ฃผ์๊ฐ์ ๋ฃ๋๋ค. if (firstNode == null) { firstNode = newNode; // ์ฒซ ๋ฒ์งธ ๋ ธ๋์ผ ๊ฒฝ์ฐ ๊ฐ๋ง ๋ฃ์ด์ฃผ๊ณ ๋๋ } else { Node<E> lastNode = getLastNode(); // ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ์ ธ์จ๋ค. lastNode.next = newNode; // ๋ง์ง๋ง ๋ ธ๋์ next์ ์๋ก ์์ฑํ Node ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๋ฃ์ด์ค๋ค. } } /** * ๋ฉ์๋๋ช : getLastNode * ๊ธฐ๋ฅ : ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ฐํํ๋ค. * ๋ฐํ๊ฐ : Node * ๋งค๊ฐ๋ณ์ : ์์ */ private Node<E> getLastNode() { Node<E> nextNode = firstNode.next; // nextNode๊ฐ null์ด๋ผ๋ ๊ฒ์ ์ฐ๊ฒฐ๋์ด์๋ node๊ฐ ํ๋๋ฟ์ด๋ผ๋ ๋ป. // ํ๋๋ฐ์ ์์ผ๋๊น firstNode๊ฐ lastNode์ด๋ฏ๋ก firstNode๋ฅผ ๋ฐํํด์ค๋ค. if (nextNode == null) return firstNode; // ๋ง์ง๋ง ๋ ธ๋๋ผ๋ ๊ฒ์ ์ฐธ์กฐ๋ณ์์ next์ ๊ฐ์ด null์ด๋ผ๋ ๊ฒ์ ์๋ฏธํจ. // nextNode.next์ ๊ฐ์ด null์ด ์๋ ๋๊น์ง ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด ๋ง์ง๋ง ๋ ธ๋๋ฅผ ์ป์ ์ ์๋ค. while (nextNode.next != null) { nextNode = nextNode.next; } return nextNode; } @Override public String toString() { if (firstNode == null) return ""; // ์ฐ๊ฒฐ๋์ด์๋ Node๊ฐ ์์ผ๋ฉด ๊ณต๋ฐฑ ๋ฐํ String tmp = firstNode + ""; // ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ๋์ด์๋ ๋ชจ๋ obj ๊ฐ์ ๋ํ๊ธฐ ์ํ ๋ณ์ Node<E> nextNode = firstNode.next; // nextNode๊ฐ null์ด๋ผ๋ ๊ฒ์ ์ฐ๊ฒฐ๋์ด์๋ node๊ฐ ํ๋ ๋ฟ์ด๋ผ๋ ๋ป. ํ๋๋ฐ์ ์์ผ๋๊น firstNode์ obj๊ฐ๋ง ๋ฐํํด์ค๋ค. if (nextNode == null) return tmp; tmp += (", " + nextNode); while (nextNode.next != null) { nextNode = nextNode.next; tmp += (", " + nextNode); } return tmp; } }
3์์๋ ๋ฐฐ์ด ๊ธฐ๋ฐ์ Vector๋ฅผ ๊ตฌํํด๋ณด์๋๋ฐ, ์ด๋ฒ 4์์๋ ์ฐ๊ฒฐ ๊ธฐ๋ฐ ์๋ฃ๊ตฌ์กฐ์ธ LinkedList๋ฅผ ์ง์ ๊ตฌํํด๋ณด์๋ค. ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ ์นํด์ง ๊ฒ ๊ฐ๋ค ใ ใ
์ด๋ฒ ๋ฌ์๋ ์๋ฐ ์ง๋๋ฅผ ๋๊ฐ๋๋ฐ์ ๋ ๋ง์ ์๊ฐ์ ํฌ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ add์ toString ๋ฉ์๋๋ง ๊ตฌํํ์ง๋ง ์ถํ ํํํ ํด์ remove๋ indexOf ๋ฑ๋ฑ..๋ ๊ตฌํํด๋ณด๊ณ ์ถ๋ค.
SQL - ์ค๋ผํด
์๊ฐ
- ๋์ค์ ์ด ์๊ธฐ๋ฅผ ๋์๋ดค์ ๋ ํํํ๋ ๊ธฐ์ต์ผ๋ก ๋จ์ง ์๋๋ก ๋งค์ผ๋งค์ผ ์ต์ ์ ๋คํ์ ํ์ดํ
- ํญ์ ๊ฐ์กฐํ์๋ ๊ฒ : ๋๋ฉ์ธ, ์ ๋ฌด ์ง์์ด ์ ์ผ ์ค์ํ๋ค. ์ฝ๋๋ AI๊ฐ ํจ์ฌ ๋ ์ ์งฌ. ๊ทธ๊ฑธ ์ด์ฉํด ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ์ค๊ณ๋ฅผ ํ๋ ๊ฒ ๊ฐ๋ฐ์์ ๋ชซ ์ด๊ฑธ ํ๋ ค๋ฉด ์ ๋ฌด๋ฅผ ์ ์ดํดํ๊ณ ์์ด์ด์ผ ํ๋ค.
- ์ง๋ฌธ
๋ฌดํฑ๋๊ณ ์ง๋ฌธํ๊ธฐ ์ ์
- ์ฑ ๋ณด๋ค๊ฐ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ๋์ค๋ฉด ์ผ๋จ ํ์ ํ๊ดํ์ผ๋ก ๋ฐ์ค์น๊ณ ๋์ด๊ฐ๊ธฐ
- ๊ทธ ์ฑํฐ ๋ค ๋ง์น๊ณ ์ดํด ์ ๋๋ ๋ถ๋ถ ๋ค์ ์ฝ์ด๋ณด๊ธฐ
- ๊ทธ๋๋ ์ดํด ์ ๋๋ฉด ๊ฒ์ or chatGPTํตํด์ ์ฐพ์๋ณด๊ณ
- ๋ด๊ฐ ์ดํดํ ๊ฒ ๋ง๋์ง ์ฒดํฌํ๋ ์ ๋๋ก ์ง๋ฌธ
- ๊ตต์งํ ์คํ ์์ค ํ๋ ์ ํด์ ์์ฃผ ์์ค ๊น๋ด์ผํจ(ex ์คํ๋ง) ๋ฐฐ์ฐ๋ ๊ฒ ์ ๋ง ๋ง์..!
์๊ธฐ๊ณ๋ฐ ์๊ฐ(์ง์ /์์ ) | 1์ฃผ์ฐจ | 2์ฃผ์ฐจ | 3์ฃผ์ฐจ | 4์ฃผ์ฐจ | 5์ฃผ์ฐจ |
---|---|---|---|---|---|
3์ | 73 (67/6) | 84.5 (74/10.5) | 70 (61.5/8.5) | ||
4์ | 81 (73.5/7.5) | 79 (74/5) | 82.5 (77.5/5) | 78.5 (71.5/7) | - |
Uploaded by N2T