Time tracker
๊ตฌ๋ถ | ๋ชฉํ์๊ฐ | ์ฌ์ฉ์๊ฐ | ๋ฌ์ฑ๋ฅ % | ์์ธ๋ถ์ | ๋ค์ ์ฃผ์ ์ ์ฉํ ๊ฒ |
---|---|---|---|---|---|
๐งโโ๏ธ์์ | - | 7 | - | ||
โ๏ธ์ง์ | 82 | 71.5 | 87% | - ์๋ค๋ก ๋ญ๋นํ ์๊ฐ๋ง ์ผ์ฃผ์ผ ํฉ์ณ์ 4.5์๊ฐ +) ๊ธฐํ์๊ฐ๋ ๋ง์๋ค.(์ค๊ธ ๊ด๋ จ์ผ๋ก๋ 4์๊ฐ ์ฐ๊ณ ,,) | - ์์ฌ 30๋ถ์ปท : ํ์ด๋จธ ๋ง์ถฐ์ ๋ฐฅ 20๋ถ ์ปทํ๊ณ ๋จ์ 10๋ถ์ ์์นํ๊ณ ์ ๋ฆฌํ๊ณ ๋ด๋ ค๊ฐ๊ธฐ - ์ฐจ์ฃผ๋ถํฐ๋ ์๋ค๋ค์๊ฐ ๋ญ๋น์๊ฐ์ผ๋ก ์ฒดํฌ |
์ฌํ์ | 1 | 6.5 | 650% | 2์๊ฐ์ 4๊ธฐ๋ถ๋ค ๋์๋๋ฆฐ ๊ฒ! 4.5์๊ฐ์ ์๋ค๋ก ๋ญ๋น๐ฅฒ | |
๐โโ๏ธ์ ์ฒด์ | - | 0.5 | - | ํ ๋ฒ์ด๋ผ๋ ํ๋ค ์ ํ์ด ํํณ | |
๐์ | 49 | 49 | 100% | ||
๐งน๊ธฐํ | 28 | 40 | 143% | ์ด๋ฒ ์ฃผ๋ ์ ๋ ๊ธฐํ์๊ฐ์ด ๋ง์๋ค.. | ์ ์์ ์ธ ๋ ์ด๋ฉด ๊ธฐํ์๊ฐ 3.5์ฌ์ผ ํจ |
์๊ฐ๊ธฐ๋ก

Weekly Feedback

table
์ด๋ฒ ์ฃผ ๋ชฉํ ์ด๋ฒ ์ฃผ ๊ฒฐ๊ณผ 1. Java ๋ณต์ต
๋ชฉํ : 6, 7, 8, 10, 11์ฅ ๋ฐฑ์ง ๋ณต์ต(๋งค์ผ ํ ์ฑํฐ์ฉ)
์๊ฐ : ์ค์ 7์ 20๋ถ~7์ 40๋ถ
2. CSS
- 1์ผ 1w3schools(how to ๋ถ์ - ์ฃผ์๋ฌ๊ณ ํต์ฌ ์ ๋ฆฌํ๊ธฐ)1. Java ๋ณต์ต : ๋ฌ์ฑ๋ฅ 100%
2. CSS : ๋ฌ์ฑ๋ฅ 100%
๊ธ์ฃผ์ ํ์ตํ ๊ฒ๋ค
Spring
์คํ๋ง์ ์ ์ Ch1~Ch2.21
๐Ch1. 01 Spring ์์ํ๊ธฐ
์คํ๋ง ๋ฐฐ์ด์ง ์ผ์ฃผ์ผ์ ๋ ๊ฒ ๊ฐ์๋ฐ ์์ 3์ผ๋ฐ์ ์ ํ๊ตฌ๋ ํ๋ฃจ๊ฐ ์ผ์ฃผ์ผ๊ฐ๋ค ์์ฆ
- ํจํค์ง
๋ด๊ฐ ๋ง๋ ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌํด์ผ ์๋น์ค๊ฐ ๊ฐ๋ฅํ๋ฐ, ์ด๋ ํ์ผ์ ํ๋๋ก ๋ค ๋ฌถ์ด์ ์ค์ผ ํ๋ค.
- war : web archive
- jar : java archive
- Base64 : ์ด๋ฐ ๊ฑด ์น ๊ธฐ๋ณธ์. ์ ์๊ณ ์์ด์ผ ํ๋ค.
- ๋น๋๋๊ตฌ : ํจํค์ง, ์์กด์ฑ ๊ด๋ฆฌ(๋ผ์ด๋ธ๋ฌ๋ฆฌ)
- Maven : ์ค์ ํ์ผ ์์ ๊ฐ๋ฅ
pom.xml : ๋ฉ์ด๋ธ ์ค์ ํ์ผ
pom.xml ์์ ์ ๋ฉ์ด๋ธ ์ ๋ฐ์ดํธ ํด์ผ ํ๋ค.
๋ด ํ๋ก์ ํธ์ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๋ฉด ์ ์ฅ์์ ๊ฐ์ ํ๊ทธ๋ฅผ pom.xml์ ๋ฃ๋๋ค. ๊ทธ๋ผ ์ธํฐ๋ท์์ ์ง๊ฐ ์์์ ๊ฐ์ง๊ณ ์ด. ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๋ง ์ถ๊ฐํ๋ฉด๋จ. ์ด๋ฐ ๊ฑธ ์์กด์ฑ. ๋ํ๋์ ๊ด๋ฆฌ๋ผ๊ณ ํ๋ค.
- Gradle : ์ค์ ํ์ผ ์์ ๋ถ๊ฐ๋ฅ
- Maven : ์ค์ ํ์ผ ์์ ๊ฐ๋ฅ
- ์คํ๋ง ํ๋ก์ ํธ ๊ตฌ์กฐ
- target : src์ ๊ฒฐ๊ณผ๋ฌผ
- ์์ค๋ java์ resources๊ฐ ์๋ค.
- web.xml : ํฐ์บฃ ์ค์ ํ์ผ
JS
์นด๋๊ฒ์ ๊ธฐ๋ฅ ์ถ๊ฐ
cardGame.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> img { width: 120px; height: 180px; cursor: pointer; transition: transform 1s ease; } img:hover { transform: translateY(-30px); outline: black solid 1px; } #pairDiv, span { background-color: greenyellow; width: 30%; margin-top: 10px; font-size: 20px; } .matched { opacity: 0.3; } </style> </head> <body> <div> <button id="btnShow">show</button> <button id="btnHide">hide</button> <button id="btnShuffle">shuffle</button> <button id="hint">ํํธ</button> </div> <div id="pairDiv"> ๋จ์ pair์ ๊ฐ์ : <span id="pairsLeft"></span> </div> <br><br> <div id="board"> <!-- ์นด๋๋ฅผ ๋ณด์ฌ์ค ๊ณณ --> </div> <script> const NUMBER_OF_CARDS = 52; // ์นด๋์ ์ด ๊ฐ์ const NUMBER_OF_HINTS = 2; // ํํธ๋ก ๋ณด์ฌ์ค ์นด๋์ ๊ฐ์ const NUMBER_OF_RANKS = 13; const btnShow = document.getElementById('btnShow'); const btnHide = document.getElementById('btnHide'); const btnShuffle = document.getElementById('btnShuffle'); const btnHint = document.getElementById('hint'); const pairsLeft = document.getElementById('pairsLeft'); let cardArr = new Array(NUMBER_OF_CARDS); window.onload = function () { // main ๋ฉ์๋ initGame(); // ๊ฒ์ ์ด๊ธฐํ startGame(); // ๊ฒ์ ์์ } // show ๋ฒํผ์ ๋๋ฅด๋ฉด ์นด๋๋ฅผ ์ ๋ถ ๋ณด์ฌ์ค๋ค. btnShow.onclick = function() { flipAllCards(cardArr, false); }; // hide ๋ฒํผ์ ๋๋ฅด๋ฉด ์นด๋๋ฅผ ์ ๋ถ ์จ๊ธด๋ค. btnHide.onclick = function() { flipAllCards(cardArr, true); }; btnShuffle.onclick = function() { initGame(cardArr); startGame(cardArr); }; btnHint.onclick = showHint; const A = 1; const J = 11 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; // ํ์ฌ ์นด๋๊ฐ ์๋ฉด์ธ์ง๋ฅผ ํ์ธํ๋ ๋ณ์ this.isPaired = false; // pair ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ณ์ } 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; } // 6. ๋จ์ pair์ ๊ฐ์ ์ด๊ธฐ๊ฐ ๋ณด์ฌ์ฃผ๊ธฐ pairsLeft.innerHTML = NUMBER_OF_CARDS / 2; } function startGame() { // ์นด๋ ์ ๋ถ๋ฅผ ๋ท๋ฉด ๋ณด์ฌ์ค๋ค. flipAllCards(cardArr, true); } // ์นด๋ ๋ฐฐ์ด์ ์ด๊ธฐํํ๋ค. function initCard(cardArr) { let suitChk = 1; let numberChk = 1; for (let i = 0; i < NUMBER_OF_CARDS; 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 checkPair(twoCards) { return twoCards[0].number == twoCards[1].number && Math.abs(twoCards[0].suit - twoCards[1].suit); } // ๋จ์ pair์ ๊ฐ์ update function updatePairsLeft() { // ๋จ์ pair์ ๊ฐ์ ๊ตฌํ๋ ๋ฒ = getBackCardIndexArr ํด์ ๊ฐ์ ธ์จ ๋ฐฐ์ด์ length / 2ํ๋ฉด ๋จ const leftCardIndexArr = getLeftCardIndexArr(); pairsLeft.innerHTML = leftCardIndexArr.length / 2; // ๋จ์ ์นด๋์ ๊ฐ์๊ฐ 1๊ฐ ์ดํ๋ฉด ๋ค์ํ๊ฒ ๋๊ณ ๋ฌผ์ด๋ณด๊ณ Y๋ฉด shuffle N์ด๋ฉด๊ธฐ๋๋ด๊ธฐ if (leftCardIndexArr.length < 1) { // ๊ฑ ๋ฌผ์ด๋ณด์ง ๋ง๊ณ 1๊ฐ ์ดํ๋ฉด ์นด๋ ๋ค ์ง์ฐ๊ณ ๋ค์ํ๊ธฐ ๋ฒํผ์ด๋ ์๋ ํ์ ๋ณด์ฌ์ฃผ๊ธฐ if (confirm("์ฑ๊ณต. ๊ฒ์์ ์ข ๋ฃํ์๊ฒ ์ต๋๊น? | ๊ฒ์ ์ข ๋ฃ = ํ์ธ | ์ฌ์๋ = ์ทจ์")) { alert("๊ฒ์ ์ข ๋ฃ"); } else { btnShuffle.onclick(); } } } // ๋งค์น ์ฌ๋ถ๋ฅผ ๋ณ๊ฒฝํ๋ค. function updateIsPaired(cards, isPaired) { let card; for (let i = 0; i < cards.length; i++) { card = cards[i]; document.getElementById(card.getId()).classList.add("matched"); card.isPaired = isPaired; } } // ์นด๋ ํด๋ฆญ ์ ๋ฐ์๋๋ ์ด๋ฒคํธ function cardClick() { // ์นด๋๋ฅผ ์ฐพ๋๋ค. const card = findCard(this); // 1. ์นด๋๊ฐ ์๋ฉด์ธ์ง ํ์ธํ๋ค. if (isFront(card)) // 1-1. ์๋ฉด์ด๋ฉด return return; // 1-2. ๋ท๋ฉด์ด๋ฉด ๋ค์ง๋๋ค. flip(card); // 2. ๋ค์ง์ ์นด๋๊ฐ 2์ฅ์ธ๊ฐ? const chkTwoCards = checkFrontCardCountTwo(); if (chkTwoCards) { // 2-1. ๋ ์นด๋์ ์ง์ด ์ผ์นํ๋์ง ์ฒดํฌํ๋ค. if (checkPair(chkTwoCards)) { // 2-2. ์ผ์นํ๋ฉด ๊ณ์ ์งํํ๋ค. // pair์ธ ์นด๋๋ค์ isMatched = true๋ก ๋ณ๊ฒฝ updateIsPaired(chkTwoCards, true); // ๋จ์ pair์ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๊ธฐ updatePairsLeft(); } else { // 2-3. ์ผ์นํ์ง ์์ผ๋ฉด ํด๋ฆญํ๋ ์นด๋๋ค์ ๋ค์ ๋ค์ง๋๋ค. setTimeout(function() { flipAllCards(chkTwoCards, true); }, 600); } } } // ๊ธฐ๋ณธ ์ ๋ ฌ - 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 < NUMBER_OF_CARDS; 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) * NUMBER_OF_RANKS}.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. ์นด๋๊ฐ ์๋ฉด์ธ์ง ํ์ธํ๋ค. +) hide์์ pair๋ ์นด๋๋ค์ ์ฌ์ ผํ ๋ณด์ฌ์ ธ์ผ ํ๋ค. if (isFront && !card.isPaired) { // 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 flipAllCards(cardArr, isFront) { // ์นด๋์ ์ด ๊ฐ์๋งํผ ๋ฐ๋ณต๋ฌธ ๋๋ฉด์ flip(card)๋ฅผ ํธ์ถ for (const card of cardArr) { flip(card, isFront); } } // ๋ค์งํ์๋ ์นด๋์ ๊ฐ์๊ฐ 2์ฅ์ธ์ง ์ฒดํฌํ๋ค. function checkFrontCardCountTwo() { // ๋ค์งํ์๋ ์นด๋์ ์กฐ๊ฑด : isFront = true && isMatched = false let returnCards = []; for (let i = 0; i < NUMBER_OF_CARDS; i++) { let card = cardArr[i]; if (card.isFront && !card.isPaired) { returnCards.push(card); } } if (returnCards.length == 2) { // ๋ค์งํ์๋ ์นด๋์ ๊ฐ์๊ฐ 2๊ฐ๋ฉด 2์ฅ์ ์นด๋๋ฅผ ๋ด์ ๋ฐฐ์ด๋ฐํ return returnCards; } else { // ์๋๋ผ๋ฉด false๋ฐํ 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 < NUMBER_OF_CARDS; i++) { let card = cardArr[i]; if (card.number == number && card.suit == suit) return card; } } // ๋ท๋ฉด์ธ ์นด๋๋ค์ index๋ฅผ ๊ฐ์ ธ์จ๋ค. (์ด๋ฏธ ์๋ฉด์ธ ์นด๋๋ค์ ์ ์ธ) function getLeftCardIndexArr() { let notFrontCardIndexArr = []; for (let i = 0; i < NUMBER_OF_CARDS; i++) { if (!cardArr[i].isPaired) notFrontCardIndexArr.push(i); } return notFrontCardIndexArr; } function getRandom(max, count) { // ์ด๊ฑธ Set์ผ๋ก ๋ฐ๊พธ๊ณ frontIndexArr์ length๊ฐ 2๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณต๋ฌธ ๋๊ธฐ let randomNumArr = new Set(); while (randomNumArr.size < count) { randomNumArr.add(parseInt(Math.random() * max)); } return randomNumArr; } function showHintRandom(cards) { // notFrontCardIndexArr์์ ๋๋คํ ์นด๋์ index๋ฅผ ๊ฐ์ ธ์์ ํด๋นํ๋ index์ ์นด๋์ ์๋ฉด์ ๋ณด์ฌ์ค๋ค. const frontIndexArr = []; // ํํธ๋ก ๋ณด์ฌ์ค card์ index๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์ const randomNumArr = getRandom(cards.length, NUMBER_OF_HINTS); for (const random of randomNumArr) { flip(cardArr[cards[random]], false); // ๋๋คํ ์นด๋์ ์๋ฉด์ ๋ณด์ฌ์ค๋ค. // [์กฐ๊ฑด2] ๋ณด์ฌ์ง๋ 2๊ฐ์ ์นด๋๊ฐ ๊ฐ์ ์นด๋๋ฉด ์ ๋๋ค. cards.splice(random, 1); frontIndexArr.push(cards[random]); } return frontIndexArr; } // ๋๋คํ 2๊ฐ์ ์นด๋์ ์๋ฉด์ 2์ด๋์ ๋ณด์ฌ์ค๋ค. function showHint() { // [์กฐ๊ฑด1] ์ด๋ฏธ ์ง์ด ๋ง์ถฐ์ง ์นด๋๋ ์ ์ธํด์ผ ํ๋ค. - ๋ท๋ฉด์ธ ์นด๋๋ค์ index๋ฅผ ๊ฐ์ ธ์จ๋ค. (์ด๋ฏธ ์๋ฉด์ธ ์นด๋๋ค์ ์ ์ธ) let backCardIndexArr = getLeftCardIndexArr(); // ๋ท๋ฉด์ธ ์นด๋๋ค ์ค์์ ๋๋ค์ผ๋ก ์๋ฉด์ ๋ณด์ฌ์ค๋ค. let frontIndexArr = showHintRandom(backCardIndexArr); // 1์ด ํ์ ๋ณด์ฌ์ฃผ์๋ 2๊ฐ์ ์นด๋์ ๋ท๋ฉด์ ๋ค์ ๋ณด์ฌ์ค๋ค. btnHint.disabled = true; // ๊ธฐ๋ค๋ฆฌ๋ 1์ด๋์ ๋ ํํธ ๋ฒํผ์ ๋๋ฅผ ์ ์๋๋ก disabled ์ฒ๋ฆฌ setTimeout(function() { for (let i = 0; i < NUMBER_OF_HINTS; i++) { flip(cardArr[frontIndexArr[i]], true); } btnHint.disabled = false; }, 1000); } // from๊ณผ to ๋ฒ์์ ์ ์(int)๊ฐ์ ๋ฐํํ๋ค. from๊ณผ to ๋ชจ๋ ๋ฒ์์ ํฌํจ๋๋ค. function getRand(from, to) { return parseInt(((Math.random() * Math.abs(to-from) + 1))) + Math.min(from, to); } </script> </body> </html>
- ๊ธฐ์กด : 1 pair๋ง ๋ง์ถ๋ฉด ๊ฒ์ ์ข
๋ฃ
๋ณ๊ฒฝ : ๋ชจ๋ pair ๋ง์ถฐ์ผ ๊ฒ์ ์ข ๋ฃ
๊ธฐ์กด์๋ ํ ์์ ์นด๋๋ง ๋ง์ถ๋ฉด ๊ฒ์์ด ์ข ๋ฃ๋์๊ธฐ ๋๋ฌธ์, hide์ show ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ๋ชจ๋ ์นด๋๋ฅผ ์จ๊ธฐ๊ณ ๋ค์ง๊ธฐ๋ง ํ๋ฉด ๋์๋ค. ํ์ง๋ง ์ด์ ๋ชจ๋ ์นด๋ ์์ ๋ง์ถ์ด์ผ ๊ฒ์์ด ์ข ๋ฃ๋๋๋ก ์์ ํด์, ์ด๋ฏธ ๋ง์ถฐ์ง ์นด๋ ์์ด ์กด์ฌํ ๋ show์ hide ๊ธฐ๋ฅ์ด ์ ๋๋ก ์๋ํ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋์ Card ์์ฑ์ ํจ์์ isFront๋ฟ๋ง ์๋๋ผ isPaired๋ผ๋ ๊ตฌ๋ถ๊ฐ์ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์นด๋๋ฅผ ๋ค์ง์ ๋ ์ด๋ฏธ ๋งค์น๋ ์นด๋๋ ๋ท๋ฉด์ ๋ณด์ฌ์ฃผ์ง ์๋๋ก ์ฒ๋ฆฌํ๋ค.
function Card(number, suit) { //TODO suit๋ number ์ง์ญ๋ณ์ํํ๊ธฐ this.number = number; this.suit = suit; this.isFront = true; // ํ์ฌ ์นด๋๊ฐ ์๋ฉด์ธ์ง๋ฅผ ํ์ธํ๋ ๋ณ์ this.isPaired = false; // pair ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ณ์ } // ์นด๋๋ฅผ ๋ค์ง๋๋ค. function flip(card, isFront) { // 1. ์นด๋๊ฐ ์๋ฉด์ธ์ง ํ์ธํ๋ค. +) hide์์ pair๋ ์นด๋๋ค์ ์ฌ์ ผํ ๋ณด์ฌ์ ธ์ผ ํ๋ค. if (isFront && !card.isPaired) { // 1-1. ์๋ฉด(๊ทธ๋ฆผ)์ด๋ฉด ๋ท๋ฉด(๋๋ด๊ณฐ)์ ๋ณด์ฌ์ค๋ค. showBack(card); } else { // 1-2. ๋ท๋ฉด(๋๋ด๊ณฐ)์ด๋ฉด ์๋ฉด(๊ทธ๋ฆผ์ ๋ณด์ฌ์ค๋ค.) showFront(card); } }
- ํํธ ๊ธฐ๋ฅ : ๋๋คํ 2๊ฐ์ ์นด๋์ ์๋ฉด์ 2์ด๋์ ๋ณด์ฌ์ค๋ค.
// ๋๋คํ 2๊ฐ์ ์นด๋์ ์๋ฉด์ 2์ด๋์ ๋ณด์ฌ์ค๋ค. function showHint() { // [์กฐ๊ฑด1] ์ด๋ฏธ ์ง์ด ๋ง์ถฐ์ง ์นด๋๋ ์ ์ธํด์ผ ํ๋ค. - ๋ท๋ฉด์ธ ์นด๋๋ค์ index๋ฅผ ๊ฐ์ ธ์จ๋ค. (์ด๋ฏธ ์๋ฉด์ธ ์นด๋๋ค์ ์ ์ธ) let backCardIndexArr = getLeftCardIndexArr(); // ๋ท๋ฉด์ธ ์นด๋๋ค ์ค์์ ๋๋ค์ผ๋ก ์๋ฉด์ ๋ณด์ฌ์ค๋ค. let frontIndexArr = showHintRandom(backCardIndexArr); // 1์ด ํ์ ๋ณด์ฌ์ฃผ์๋ 2๊ฐ์ ์นด๋์ ๋ท๋ฉด์ ๋ค์ ๋ณด์ฌ์ค๋ค. btnHint.disabled = true; // ๊ธฐ๋ค๋ฆฌ๋ 1์ด๋์ ๋ ํํธ ๋ฒํผ์ ๋๋ฅผ ์ ์๋๋ก disabled ์ฒ๋ฆฌ setTimeout(function() { for (let i = 0; i < NUMBER_OF_HINTS; i++) { flip(cardArr[frontIndexArr[i]], true); } btnHint.disabled = false; }, 1000); }
- ๋จ์ pair์ ๊ฐ์ ๋ณด์ฌ์ฃผ๊ธฐ
JS ์์ฝ์ ๋ฆฌ +) ํด๋ก์
ํด๋ก์ : ์ด๋ค ํจ์ A์์ ์ ์ธํ ๋ณ์ a๋ฅผ ์ฐธ์กฐํ๋ ๋ด๋ถํจ์ B๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ ๊ฒฝ์ฐ A์ ์คํ ์ปจํ ์คํธ๊ฐ ์ข ๋ฃ๋ ์ดํ์๋ ๋ณ์ a๊ฐ ์ฌ๋ผ์ง์ง ์๋ ํ์
์ฝ๊ฐ ๋ชจํธํ๋ ํด๋ก์ ์ ๊ฐ๋ ์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ณด๊ณ ์๋ฒฝํ๊ฒ ์ดํดํ๋ค ใ ใ !
CSS
์ผ : Make a Website
์ : Hover Tabs
ํ : Slideshow Gallery
์ : Outline Buttons Alert Buttons
๋ชฉ, ๊ธ : Login Form
ํ : CSS/JS Modal
Java
์๋ฐ์ ์ ์ 6, 7, 8, 10, 11์ฅ ๋ฐฑ์ง๋ณต์ต, ์๋ณด์นด๋ก ์๊ธฐ
์ด๋ฒ ์ฃผ์ ์๊ฐ
- ์ด๋ฒ ์ฃผ ์์ ํค์ดํด์ก๋ค.. ์ ์ ์ฐจ๋ ค~!!~!~!
- ์ธ๋ ํ๋ก์ ํธ ๋๋๊ณ ์ฝํ๋ฆฐ ๋ฐฐ์ฐ๊ณ ์ถ๋ค ๊ทธ๋ค๋ก๋ Scala, Rust๊น์ง..
์ฐจ์ฃผ ๋ชฉํ
๊ตฌ๋ถ | ์ฐจ์ฃผ ๋ชฉํ |
---|---|
โ๏ธ์ง์ | 1. ์คํ๋ง์ ์ ์ ch2-22~ch3-21(์ด 35๊ฐ) ํ์ผ ํ๋ฃจ 7๊ฐ์ฉ ๋ชฉํ, ์ฃผ๋ง์๋ ๋ณต์ต 2. Java ๋ณต์ต ๋ชฉํ : ์๋ฐ์ ์ ์ 12, 13, 14, 15, 6์ฅ ๋ฐฑ์ง๋ณต์ต, ์๋ณด์นด๋ก ์๊ธฐ ์๊ฐ : 1) ์์นจ ์ด๋ ์๊ฐ(7:20~7:50) - ๋ฐฑ์ง ๋ณต์ต 2) ๊ฑธ์ ๋ ๋ณต๊ธฐ์ํค๊ธฐ 3) ์ ๋ ์ด๋ ์๊ฐ - ์์นจ์ ๋ชป ์ ์๊ฑฐ๋ ํ๋ ธ๋ ๊ฑฐ ์๋ณด์นด๋ก ์๊ธฐ 3. CSS - 1์ผ 1w3schools(how to ๋ถ์ - ์ฃผ์๋ฌ๊ณ ํต์ฌ ์ ๋ฆฌํ๊ธฐ) ์ผ Filter/Search List ์ : Top Navigation ํ : Modal Images ์ : Split Buttons ๋ชฉ : Sign Up Form ๊ธ : Skill Bar ํ : Delete Modal |
๐งโโ๏ธ์์ | ๋งค์ผ ๋ ผ์ด ํ ๋ง๋ ์ฝ๊ธฐ(์ค์ 8์~8์ 10๋ถ) |
๐โโ๏ธ์ ์ฒด์ | ์๊ธฐ ์ ํผ๋กค๋ฌ ์คํธ๋ ์นญ 10๋ถ(์คํ 10์ 50๋ถ~11์) |
๋ค์์ฃผ๋ํ์ดํ !๐
๋ด์ฃผ๊ฑฐ
๊ตฌ๋ถ ๋ชฉํ์๊ฐ ์ฌ์ฉ์๊ฐ ๋ฌ์ฑ๋ฅ % ์์ธ๋ถ์ ๋ค์ ์ฃผ์ ์ ์ฉํ ๊ฒ ๐งโโ๏ธ์์ (์ผ)ํผ๋๋ฐฑ + 3.5 โ๏ธ์ง์ (์ผ) + 77 ์ฌํ์ 1 ๐โโ๏ธ์ ์ฒด์ 1 ๐์ 49 ๐ฟ๊ธฐํ 28
Uploaded by N2T