ํ”ผ๋“œ๋ฐฑ&ํšŒ๊ณ /Monthly Feedback

2023๋…„ 4์›” ์›”๊ฐ„ํšŒ๊ณ 

์ฑ”๐Ÿป 2024. 1. 24. 20:07

4์›”์˜ ์‹œ๊ฐ„๊ธฐ๋ก

์ฃผ๊ฐ„ํšŒ๊ณ 

๋งค์ฃผ ์ฃผ๊ฐ„ํšŒ๊ณ  ์“ฐ๊ธฐ ์„ฑ๊ณต!

4์›” 1์ฃผ์ฐจ ์ฃผ๊ฐ„ํšŒ๊ณ 

4์›” 2์ฃผ์ฐจ ์ฃผ๊ฐ„ํšŒ๊ณ 

4์›” 3์ฃผ์ฐจ ์ฃผ๊ฐ„ํšŒ๊ณ 

4์›” 4์ฃผ์ฐจ ์ฃผ๊ฐ„ํšŒ๊ณ 

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)

  1. ์ž๋ฐ”์˜ ์ •์„ 15์žฅ : ์ž…์ถœ๋ ฅ(I/O)

    FileStream ์—…๋ฌด๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€๋”์”ฉ ๋ณผ ๋•Œ๋„ ์žˆ์—ˆ๊ณ , ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์›๋ฆฌ๋„ ๋ชจ๋ฅธ์ฑ„ ๊ทธ์ € ๋ณต๋ถ™ํ•ด์„œ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ์‘์šฉ์ด ์ „ํ˜€ ๋˜์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์— ๊ธฐํšŒ๋ฅผ ํ†ตํ•ด ์ฑ…์„ ์ •๋…ํ•˜๋ฉด์„œ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์•Œ์•„๊ฐ€๋‹ˆ ๋„ˆ๋ฌด ํฅ๋ฏธ๋กœ์› ๋‹ค.

์ž๋ฐ”์˜ ์ •์„ 7, 8, 11, 12, 13์žฅ ์น ํŒ์— ๋ฐฑ์ง€ ๋ณต์Šต

์ œ์ผ ์ค‘์š”ํ•œ ๋™๊ธฐํ™”์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๋งŽ์ด ๋ชป ์ผ๋‹ค. ๋‹ค์Œ์—๋Š” ๋™๊ธฐํ™”์ชฝ ๋จผ์ € ์จ๋ณผ ๊ฒƒ

15์žฅ์€ ์งง์€ ์ฃผ๊ธฐ๋กœ ์ž์ฃผ ๋ณต์Šตํ•ด์•ผ ๋  ๊ฒƒ ๊ฐ™๋‹ค.. ์ ˆ๋ฐ˜์€ ๋ชป์”€..

๋…์„œ - ์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ•  ๊ฒƒ์ธ๊ฐ€

  1. ์ธ์ถœ - ex) ์‹œํ—˜
  1. ๊ฐ„๊ฒฉ ๋‘๊ธฐ

    ex) ํ”Œ๋ž˜์‹œ ์นด๋“œ

    ์—ฐ์Šต์ด ์ƒ๊ฐ์—†๋Š” ๋ฐ˜๋ณต์ด ๋˜์ง€ ์•Š์„ ์ •๋„์˜ ๊ฐ„๊ฒฉ์ด๋ฉด ๋œ๋‹ค. but ๋„ˆ๋ฌด ๋งŽ์ด ์žŠ์–ด๋ฒ„๋ ค์„œ ์ƒˆ๋กœ ๋ฐฐ์šฐ๋Š” ์…ˆ์€ xx ์•ฝ๊ฐ„์˜ ๋ง๊ฐ์ด ์ค‘์š”. ์ ์–ด๋„ ํ•˜๋ฃจ

  1. ๊ต์ฐจํ•˜๊ธฐ

    ํ•œ ๊ฐ€์ง€ ์—ฐ์Šต์ด ์™„์ „ํžˆ ๋๋‚˜๊ธฐ ์ „์— ์ฃผ์ œ๋ฅผ ๋ฐ”๊พธ์–ด์•ผ ํ•œ๋‹ค. ๊ธฐ์–ต์„ ์•ฝ๊ฐ„ ํ๋ ค์ง€๊ฒŒ ํ•˜๋ฉด ์ธ์ถœ์ด ํž˜๋“ค์–ด์ง€๊ณ  ๋Šฅ์ˆ™ํ•˜๊ฒŒ ๋ฐœํœ˜ํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ, ํ•œ ์ธต ๋” ๊นŠ์ด ํ•™์Šตํ•˜๊ฒŒ ๋˜๊ณ  ๋‚˜์ค‘์— ์ˆ˜์›”ํ•˜๊ฒŒ ์ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. โ†’ ์ด๋ก ์ ์œผ๋กœ๋Š” ์•Œ๊ฒ ๋Š”๋ฐ ๋‚˜ํ•œํ…Œ ์ ์šฉํ•˜๋Š” ๊ฒŒ ์ž˜ ์•ˆ ๋œ๋‹ค ใ… 

  1. ๋ณ€ํ™”์ฃผ๊ธฐ
  1. ๋ฐ˜์ถ” : ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”๊ฐ€? ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ–ˆ๋Š”๊ฐ€? ๊ทธ๊ฒƒ์ด ์–ด๋–ค ํšจ๋ ฅ์„ ๋ฐœ์ทจํ–ˆ๋Š”๊ฐ€? โ†’ ํšŒ๊ณ ๋ž‘ ๋น„์Šทํ•œ๋“ฏ
  1. ์ •๊ตํ™” : ์ด๋ฒˆ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋‹ค์Œ์—๋Š” ์–ด๋–ค ํ–‰๋™์„ ํ•  ๊ฒƒ์ธ๊ฐ€? โ†’ ์ ์šฉ์  ์ฐพ๊ธฐ
  1. ํ•™์Šต๋ฒ•์— ๋Œ€ํ•œ ์กฐ์–ธ์€ ๋ฌดํ„ฑ๋Œ€๊ณ  ๋ฏฟ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

CSS

ํ•˜๋ฃจ์— ํ•˜๋‚˜์”ฉ w3school์— ์žˆ๋Š” how to๋ฅผ ๋ถ„์„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์—…๋ฌด๋ฅผ ํ•  ๋•Œ CSS๋ฅผ ๊ต‰์žฅํžˆ ์‹ซ์–ดํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์— ๋งค์ผ ํ•˜๋‚˜์”ฉ ๋ถ„์„ํ•˜๋ฉฐ ๊ณต๋ถ€ํ•˜๋‹ˆ ์‚ฌ์‹ค์€ ๋ชจ๋ฅด๋‹ˆ๊นŒ ์–ด๋ ค์›Œ์„œ ์‹ซ์–ดํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ชจ๋ฅด๋Š” ์†์„ฑ๋“ค์ด ๋งŽ์•„์„œ ๊ฒ ๋จน์—ˆ์ง€๋งŒ, ์ฐจ๊ทผ์ฐจ๊ทผ ์ฑ… ์ฐพ์•„๊ฐ€๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค. ์™œ ์ด๋ ‡๊ฒŒ ๋‘๋ ค์›Œํ•˜๊ณ  ํšŒํ”ผํ•ด์™”๋Š”์ง€.. ์•„๋Š” ๊ฒŒ ๋งŽ์•„์ง€๋‹ˆ ๋‘๋ ค์›€์ด ์‚ฌ๋ผ์ง€๊ณ  ์žฌ๋ฐŒ๋‹ค. "์ž˜ํ•˜๋ฉด ์žฌ๋ฏธ์žˆ๊ณ  ๋ชปํ•˜๋ฉด ์žฌ๋ฏธ์—†๋‹ค"๋Š” ๋ง์ด ์ •๋ง ๋งž๋‹ค.

๋˜, CSS๋ฅผ ์ฑ… ๋ณด๊ณ  ๊ฐœ๋…์ ์ธ ๊ฒƒ๋งŒ ์ฃผ๊ตฌ์žฅ์ฐฝ ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” w3school์—์„œ๋Š”์–ด ๋–ค ๋ ˆ์ด์•„์›ƒ์ด ์žˆ๊ณ  ์ด๋ฅผ ์ด๊ฑฐ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค CSS ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊ฑฐ๋ผ ๋” ์ž˜ ์™€๋‹ฟ๊ณ  ์žฌ๋ฐŒ์—ˆ๋‹ค.

w3schools - how to

์ด๋ฆ„๋ถ„๋ฅ˜๋‚ ์งœURL
Icon Bar - Vercical(๋ฉ”๋‰ด๋ฐ” - ์ˆ˜์ง)[์›”] Menu(55)https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_icon_bar_v
Icon Bar - Horizontal(๋ฉ”๋‰ด๋ฐ” - ์ˆ˜ํ‰)[์›”] Menu(55)https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_icon_bar_v
menu icon[์›”] Menu(55)https://www.w3schools.com/howto/howto_css_menu_icon.asp
Animated Menu Icon[์›”] Menu(55)https://www.w3schools.com/howto/howto_css_menu_icon.asp
Collapsibles/Accordion(์ ‘์ด์‹ ๋ฉ”๋‰ด?)[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_accordion.asp
Tabs[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_tabs.asp
Vertical Tabs[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_vertical_tabs.asp
Tab Headers[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_tab_header.asp
Full Page Tabs[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_full_page_tabs.asp
Slideshow[ํ™”] Images(39)https://www.w3schools.com/howto/howto_js_slideshow.asp
Fullscreen Video[ํ† ] More(112)https://www.w3schools.com/howto/howto_css_fullscreen_video.asp
Make a Website[์ผ] Website(20)https://www.w3schools.com/howto/howto_make_a_website.asp
Hover Tabs[์›”] Menu(55)https://www.w3schools.com/howto/howto_js_hover_tabs.asp
Slideshow Gallery[ํ™”] Images(39)https://www.w3schools.com/howto/howto_js_slideshow_gallery.asp
Alert Buttons[์ˆ˜] Buttons(19)https://www.w3schools.com/howto/howto_css_alert_buttons.asp
Outline Buttons[์ˆ˜] Buttons(19)https://www.w3schools.com/howto/howto_css_outline_buttons.asp
Login Form[๋ชฉ] Forms(34)https://www.w3schools.com/howto/howto_css_login_form.asp
CSS/JS Modal[ํ† ] More(112)https://www.w3schools.com/howto/howto_css_modals.asp


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๊ฐ€ ํ›จ์”ฌ ๋” ์ž˜ ์งฌ. ๊ทธ๊ฑธ ์ด์šฉํ•ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒŒ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ ์ด๊ฑธ ํ•˜๋ ค๋ฉด ์—…๋ฌด๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์–ด์•ผ ํ•œ๋‹ค.
  • ์งˆ๋ฌธ

    ๋ฌดํ„ฑ๋Œ€๊ณ  ์งˆ๋ฌธํ•˜๊ธฐ ์ „์—

    1. ์ฑ… ๋ณด๋‹ค๊ฐ€ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์ด ๋‚˜์˜ค๋ฉด ์ผ๋‹จ ํšŒ์ƒ‰ ํ˜•๊ด‘ํŽœ์œผ๋กœ ๋ฐ‘์ค„์น˜๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ
    1. ๊ทธ ์ฑ•ํ„ฐ ๋‹ค ๋งˆ์น˜๊ณ  ์ดํ•ด ์•ˆ ๋๋˜ ๋ถ€๋ถ„ ๋‹ค์‹œ ์ฝ์–ด๋ณด๊ธฐ
    1. ๊ทธ๋ž˜๋„ ์ดํ•ด ์•ˆ ๋˜๋ฉด ๊ฒ€์ƒ‰ or chatGPTํ†ตํ•ด์„œ ์ฐพ์•„๋ณด๊ณ 
    1. ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๊ฒŒ ๋งž๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ์ •๋„๋กœ ์งˆ๋ฌธ
  • ๊ตต์งํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ•˜๋‚˜ ์ •ํ•ด์„œ ์ž์ฃผ ์†Œ์Šค ๊นŒ๋ด์•ผํ•จ(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