From 26d0b81aa803b496d5492f0ffdbb9db884321eca Mon Sep 17 00:00:00 2001 From: codnscodns Date: Tue, 10 Sep 2024 21:38:07 +0900 Subject: [PATCH 01/12] create ex2 --- .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\352\260\200\354\227\260/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\352\260\200\354\227\260/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\352\260\200\354\227\260/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\352\260\200\354\227\260/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\352\260\200\354\227\260/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\352\260\200\354\227\260/ex7.ts" | 3 - "\352\271\200\352\260\200\354\227\260/ex8.ts" | 11 --- "\352\271\200\352\260\200\354\227\260/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\353\217\231\354\227\260/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\353\217\231\354\227\260/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\353\217\231\354\227\260/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\353\217\231\354\227\260/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\353\217\231\354\227\260/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\353\217\231\354\227\260/ex7.ts" | 3 - "\352\271\200\353\217\231\354\227\260/ex8.ts" | 11 --- "\352\271\200\353\217\231\354\227\260/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\353\217\231\354\235\200/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\353\217\231\354\235\200/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\353\217\231\354\235\200/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\353\217\231\354\235\200/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\353\217\231\354\235\200/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\353\217\231\354\235\200/ex7.ts" | 3 - "\352\271\200\353\217\231\354\235\200/ex8.ts" | 11 --- "\352\271\200\353\217\231\354\235\200/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\353\257\270\352\260\225/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\353\257\270\352\260\225/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\353\257\270\352\260\225/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\353\257\270\352\260\225/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\353\257\270\352\260\225/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\353\257\270\352\260\225/ex7.ts" | 3 - "\352\271\200\353\257\270\352\260\225/ex8.ts" | 11 --- "\352\271\200\353\257\270\352\260\225/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\354\203\201\355\230\204/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\354\203\201\355\230\204/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\354\203\201\355\230\204/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\354\203\201\355\230\204/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\354\203\201\355\230\204/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\354\203\201\355\230\204/ex7.ts" | 3 - "\352\271\200\354\203\201\355\230\204/ex8.ts" | 11 --- "\352\271\200\354\203\201\355\230\204/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\354\204\261\354\247\204/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\354\204\261\354\247\204/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\354\204\261\354\247\204/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\354\204\261\354\247\204/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\354\204\261\354\247\204/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\354\204\261\354\247\204/ex7.ts" | 3 - "\352\271\200\354\204\261\354\247\204/ex8.ts" | 11 --- "\352\271\200\354\204\261\354\247\204/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\354\235\270\354\230\201/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\354\235\270\354\230\201/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\354\235\270\354\230\201/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\354\235\270\354\230\201/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\354\235\270\354\230\201/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\354\235\270\354\230\201/ex7.ts" | 3 - "\352\271\200\354\235\270\354\230\201/ex8.ts" | 11 --- "\352\271\200\354\235\270\354\230\201/ex9.js" | 68 ------------------ "\352\271\200\354\261\204\354\232\264/ex2.js" | 53 +++++++++++++- .../ex2.test.js" | 1 + .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\352\271\200\355\225\264\354\233\220/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\352\271\200\355\225\264\354\233\220/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\352\271\200\355\225\264\354\233\220/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\352\271\200\355\225\264\354\233\220/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\352\271\200\355\225\264\354\233\220/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\352\271\200\355\225\264\354\233\220/ex7.ts" | 3 - "\352\271\200\355\225\264\354\233\220/ex8.ts" | 11 --- "\352\271\200\355\225\264\354\233\220/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\353\260\225\354\213\234\355\231\215/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\353\260\225\354\213\234\355\231\215/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\353\260\225\354\213\234\355\231\215/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\353\260\225\354\213\234\355\231\215/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\353\260\225\354\213\234\355\231\215/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\353\260\225\354\213\234\355\231\215/ex7.ts" | 3 - "\353\260\225\354\213\234\355\231\215/ex8.ts" | 11 --- "\353\260\225\354\213\234\355\231\215/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\353\260\225\354\247\200\355\231\230/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\353\260\225\354\247\200\355\231\230/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\353\260\225\354\247\200\355\231\230/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\353\260\225\354\247\200\355\231\230/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\353\260\225\354\247\200\355\231\230/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\353\260\225\354\247\200\355\231\230/ex7.ts" | 3 - "\353\260\225\354\247\200\355\231\230/ex8.ts" | 11 --- "\353\260\225\354\247\200\355\231\230/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\353\260\225\354\261\204\353\246\260/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\353\260\225\354\261\204\353\246\260/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\353\260\225\354\261\204\353\246\260/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\353\260\225\354\261\204\353\246\260/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\353\260\225\354\261\204\353\246\260/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\353\260\225\354\261\204\353\246\260/ex7.ts" | 3 - "\353\260\225\354\261\204\353\246\260/ex8.ts" | 11 --- "\353\260\225\354\261\204\353\246\260/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\226\221\354\247\200\354\235\200/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\226\221\354\247\200\354\235\200/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\226\221\354\247\200\354\235\200/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\226\221\354\247\200\354\235\200/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\226\221\354\247\200\354\235\200/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\226\221\354\247\200\354\235\200/ex7.ts" | 3 - "\354\226\221\354\247\200\354\235\200/ex8.ts" | 11 --- "\354\226\221\354\247\200\354\235\200/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\234\240\354\234\240\354\240\225/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\234\240\354\234\240\354\240\225/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\234\240\354\234\240\354\240\225/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\234\240\354\234\240\354\240\225/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\234\240\354\234\240\354\240\225/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\234\240\354\234\240\354\240\225/ex7.ts" | 3 - "\354\234\240\354\234\240\354\240\225/ex8.ts" | 11 --- "\354\234\240\354\234\240\354\240\225/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\234\241\354\247\200\354\235\200/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\234\241\354\247\200\354\235\200/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\234\241\354\247\200\354\235\200/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\234\241\354\247\200\354\235\200/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\234\241\354\247\200\354\235\200/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\234\241\354\247\200\354\235\200/ex7.ts" | 3 - "\354\234\241\354\247\200\354\235\200/ex8.ts" | 11 --- "\354\234\241\354\247\200\354\235\200/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\234\244\352\261\264\355\235\254/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\234\244\352\261\264\355\235\254/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\234\244\352\261\264\355\235\254/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\234\244\352\261\264\355\235\254/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\234\244\352\261\264\355\235\254/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\234\244\352\261\264\355\235\254/ex7.ts" | 3 - "\354\234\244\352\261\264\355\235\254/ex8.ts" | 11 --- "\354\234\244\352\261\264\355\235\254/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\234\244\354\230\201\355\227\214/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\234\244\354\230\201\355\227\214/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\234\244\354\230\201\355\227\214/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\234\244\354\230\201\355\227\214/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\234\244\354\230\201\355\227\214/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\234\244\354\230\201\355\227\214/ex7.ts" | 3 - "\354\234\244\354\230\201\355\227\214/ex8.ts" | 11 --- "\354\234\244\354\230\201\355\227\214/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\235\264\353\217\231\354\234\244/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\235\264\353\217\231\354\234\244/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\235\264\353\217\231\354\234\244/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\235\264\353\217\231\354\234\244/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\235\264\353\217\231\354\234\244/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\235\264\353\217\231\354\234\244/ex7.ts" | 3 - "\354\235\264\353\217\231\354\234\244/ex8.ts" | 11 --- "\354\235\264\353\217\231\354\234\244/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\235\264\354\210\230\353\257\274/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\235\264\354\210\230\353\257\274/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\235\264\354\210\230\353\257\274/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\235\264\354\210\230\353\257\274/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\235\264\354\210\230\353\257\274/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\235\264\354\210\230\353\257\274/ex7.ts" | 3 - "\354\235\264\354\210\230\353\257\274/ex8.ts" | 11 --- "\354\235\264\354\210\230\353\257\274/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\235\264\354\235\270\354\210\230/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\235\264\354\235\270\354\210\230/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\235\264\354\235\270\354\210\230/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\235\264\354\235\270\354\210\230/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\235\264\354\235\270\354\210\230/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\235\264\354\235\270\354\210\230/ex7.ts" | 3 - "\354\235\264\354\235\270\354\210\230/ex8.ts" | 11 --- "\354\235\264\354\235\270\354\210\230/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\235\264\355\225\230\353\212\230/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\235\264\355\225\230\353\212\230/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\235\264\355\225\230\353\212\230/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\235\264\355\225\230\353\212\230/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\235\264\355\225\230\353\212\230/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\235\264\355\225\230\353\212\230/ex7.ts" | 3 - "\354\235\264\355\225\230\353\212\230/ex8.ts" | 11 --- "\354\235\264\355\225\230\353\212\230/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\236\204\354\210\230\354\247\204/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\236\204\354\210\230\354\247\204/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\236\204\354\210\230\354\247\204/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\236\204\354\210\230\354\247\204/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\236\204\354\210\230\354\247\204/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\236\204\354\210\230\354\247\204/ex7.ts" | 3 - "\354\236\204\354\210\230\354\247\204/ex8.ts" | 11 --- "\354\236\204\354\210\230\354\247\204/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\240\225\354\212\271\354\232\251/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\240\225\354\212\271\354\232\251/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\240\225\354\212\271\354\232\251/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\240\225\354\212\271\354\232\251/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\240\225\354\212\271\354\232\251/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\240\225\354\212\271\354\232\251/ex7.ts" | 3 - "\354\240\225\354\212\271\354\232\251/ex8.ts" | 11 --- "\354\240\225\354\212\271\354\232\251/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\240\225\354\227\260\354\261\204/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\240\225\354\227\260\354\261\204/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\240\225\354\227\260\354\261\204/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\240\225\354\227\260\354\261\204/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\240\225\354\227\260\354\261\204/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\240\225\354\227\260\354\261\204/ex7.ts" | 3 - "\354\240\225\354\227\260\354\261\204/ex8.ts" | 11 --- "\354\240\225\354\227\260\354\261\204/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\240\225\354\244\221\354\235\274/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\240\225\354\244\221\354\235\274/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\240\225\354\244\221\354\235\274/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\240\225\354\244\221\354\235\274/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\240\225\354\244\221\354\235\274/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\240\225\354\244\221\354\235\274/ex7.ts" | 3 - "\354\240\225\354\244\221\354\235\274/ex8.ts" | 11 --- "\354\240\225\354\244\221\354\235\274/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\265\234\354\204\240\354\240\225/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\265\234\354\204\240\354\240\225/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\265\234\354\204\240\354\240\225/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\265\234\354\204\240\354\240\225/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\265\234\354\204\240\354\240\225/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\265\234\354\204\240\354\240\225/ex7.ts" | 3 - "\354\265\234\354\204\240\354\240\225/ex8.ts" | 11 --- "\354\265\234\354\204\240\354\240\225/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\265\234\355\230\201\355\203\234/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\265\234\355\230\201\355\203\234/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\265\234\355\230\201\355\203\234/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\265\234\355\230\201\355\203\234/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\265\234\355\230\201\355\203\234/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\265\234\355\230\201\355\203\234/ex7.ts" | 3 - "\354\265\234\355\230\201\355\203\234/ex8.ts" | 11 --- "\354\265\234\355\230\201\355\203\234/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\354\265\234\355\232\250\354\204\235/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\354\265\234\355\232\250\354\204\235/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\354\265\234\355\232\250\354\204\235/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\354\265\234\355\232\250\354\204\235/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\354\265\234\355\232\250\354\204\235/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\354\265\234\355\232\250\354\204\235/ex7.ts" | 3 - "\354\265\234\355\232\250\354\204\235/ex8.ts" | 11 --- "\354\265\234\355\232\250\354\204\235/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\355\225\234\354\204\261\353\257\274/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\355\225\234\354\204\261\353\257\274/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\355\225\234\354\204\261\353\257\274/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\355\225\234\354\204\261\353\257\274/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\355\225\234\354\204\261\353\257\274/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\355\225\234\354\204\261\353\257\274/ex7.ts" | 3 - "\355\225\234\354\204\261\353\257\274/ex8.ts" | 11 --- "\355\225\234\354\204\261\353\257\274/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\355\225\250\355\230\225\354\243\274/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\355\225\250\355\230\225\354\243\274/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\355\225\250\355\230\225\354\243\274/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\355\225\250\355\230\225\354\243\274/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\355\225\250\355\230\225\354\243\274/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\355\225\250\355\230\225\354\243\274/ex7.ts" | 3 - "\355\225\250\355\230\225\354\243\274/ex8.ts" | 11 --- "\355\225\250\355\230\225\354\243\274/ex9.js" | 68 ------------------ .../ex1/book-edit.html" | 0 .../ex1/index.html" | 0 .../ex1/register.html" | 0 ...5\355\225\230\354\204\270\354\232\224.txt" | 3 - .../ex10.test.ts" | 4 -- .../ex10.ts" | 71 ------------------- "\355\231\215\354\206\214\355\235\254/ex2.js" | 4 -- .../ex2.test.js" | 46 ------------ "\355\231\215\354\206\214\355\235\254/ex3.js" | 3 - .../ex3.test.js" | 18 ----- "\355\231\215\354\206\214\355\235\254/ex4.js" | 3 - .../ex4.test.js" | 40 ----------- "\355\231\215\354\206\214\355\235\254/ex5.js" | 3 - .../ex5.test.js" | 21 ------ .../ex6.test.ts" | 24 ------- "\355\231\215\354\206\214\355\235\254/ex6.ts" | 4 -- .../ex7.test.ts" | 70 ------------------ "\355\231\215\354\206\214\355\235\254/ex7.ts" | 3 - "\355\231\215\354\206\214\355\235\254/ex8.ts" | 11 --- "\355\231\215\354\206\214\355\235\254/ex9.js" | 68 ------------------ 602 files changed, 52 insertions(+), 11882 deletions(-) delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex1/book-edit.html" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex1/index.html" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex1/register.html" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex10.test.ts" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex10.ts" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex2.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex2.test.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex3.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex3.test.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex4.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex4.test.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex5.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex5.test.js" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex6.test.ts" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex6.ts" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex7.test.ts" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex7.ts" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex8.ts" delete mode 100644 "\352\271\200\352\260\200\354\227\260/ex9.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex1/book-edit.html" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex1/index.html" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex1/register.html" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex10.test.ts" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex10.ts" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex2.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex2.test.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex3.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex3.test.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex4.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex4.test.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex5.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex5.test.js" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex6.test.ts" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex6.ts" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex7.test.ts" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex7.ts" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex8.ts" delete mode 100644 "\352\271\200\353\217\231\354\227\260/ex9.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex1/book-edit.html" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex1/index.html" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex1/register.html" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex10.test.ts" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex10.ts" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex2.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex2.test.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex3.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex3.test.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex4.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex4.test.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex5.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex5.test.js" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex6.test.ts" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex6.ts" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex7.test.ts" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex7.ts" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex8.ts" delete mode 100644 "\352\271\200\353\217\231\354\235\200/ex9.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex1/book-edit.html" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex1/index.html" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex1/register.html" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex10.test.ts" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex10.ts" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex2.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex2.test.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex3.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex3.test.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex4.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex4.test.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex5.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex5.test.js" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex6.test.ts" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex6.ts" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex7.test.ts" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex7.ts" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex8.ts" delete mode 100644 "\352\271\200\353\257\270\352\260\225/ex9.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex1/book-edit.html" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex1/index.html" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex1/register.html" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex10.test.ts" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex10.ts" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex2.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex2.test.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex3.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex3.test.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex4.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex4.test.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex5.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex5.test.js" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex6.test.ts" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex6.ts" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex7.test.ts" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex7.ts" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex8.ts" delete mode 100644 "\352\271\200\354\203\201\355\230\204/ex9.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex1/book-edit.html" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex1/index.html" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex1/register.html" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex10.test.ts" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex10.ts" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex2.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex2.test.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex3.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex3.test.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex4.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex4.test.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex5.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex5.test.js" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex6.test.ts" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex6.ts" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex7.test.ts" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex7.ts" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex8.ts" delete mode 100644 "\352\271\200\354\204\261\354\247\204/ex9.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex1/book-edit.html" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex1/index.html" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex1/register.html" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex10.test.ts" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex10.ts" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex2.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex2.test.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex3.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex3.test.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex4.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex4.test.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex5.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex5.test.js" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex6.test.ts" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex6.ts" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex7.test.ts" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex7.ts" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex8.ts" delete mode 100644 "\352\271\200\354\235\270\354\230\201/ex9.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/book-edit.html" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/index.html" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/register.html" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex10.test.ts" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex10.ts" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex2.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex2.test.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex3.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex3.test.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex4.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex4.test.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex5.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex5.test.js" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex6.test.ts" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex6.ts" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex7.test.ts" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex7.ts" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex8.ts" delete mode 100644 "\352\271\200\355\225\264\354\233\220/ex9.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex1/book-edit.html" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex1/index.html" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex1/register.html" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex10.test.ts" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex10.ts" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex2.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex2.test.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex3.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex3.test.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex4.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex4.test.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex5.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex5.test.js" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex6.test.ts" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex6.ts" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex7.test.ts" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex7.ts" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex8.ts" delete mode 100644 "\353\260\225\354\213\234\355\231\215/ex9.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex1/book-edit.html" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex1/index.html" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex1/register.html" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex10.test.ts" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex10.ts" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex2.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex2.test.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex3.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex3.test.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex4.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex4.test.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex5.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex5.test.js" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex6.test.ts" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex6.ts" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex7.test.ts" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex7.ts" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex8.ts" delete mode 100644 "\353\260\225\354\247\200\355\231\230/ex9.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex1/book-edit.html" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex1/index.html" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex1/register.html" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex10.test.ts" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex10.ts" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex2.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex2.test.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex3.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex3.test.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex4.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex4.test.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex5.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex5.test.js" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex6.test.ts" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex6.ts" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex7.test.ts" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex7.ts" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex8.ts" delete mode 100644 "\353\260\225\354\261\204\353\246\260/ex9.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex1/book-edit.html" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex1/index.html" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex1/register.html" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex10.test.ts" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex10.ts" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex2.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex2.test.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex3.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex3.test.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex4.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex4.test.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex5.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex5.test.js" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex6.test.ts" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex6.ts" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex7.test.ts" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex7.ts" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex8.ts" delete mode 100644 "\354\226\221\354\247\200\354\235\200/ex9.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex1/book-edit.html" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex1/index.html" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex1/register.html" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex10.test.ts" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex10.ts" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex2.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex2.test.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex3.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex3.test.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex4.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex4.test.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex5.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex5.test.js" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex6.test.ts" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex6.ts" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex7.test.ts" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex7.ts" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex8.ts" delete mode 100644 "\354\234\240\354\234\240\354\240\225/ex9.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex1/book-edit.html" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex1/index.html" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex1/register.html" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex10.test.ts" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex10.ts" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex2.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex2.test.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex3.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex3.test.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex4.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex4.test.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex5.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex5.test.js" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex6.test.ts" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex6.ts" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex7.test.ts" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex7.ts" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex8.ts" delete mode 100644 "\354\234\241\354\247\200\354\235\200/ex9.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex1/book-edit.html" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex1/index.html" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex1/register.html" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex10.test.ts" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex10.ts" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex2.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex2.test.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex3.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex3.test.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex4.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex4.test.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex5.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex5.test.js" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex6.test.ts" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex6.ts" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex7.test.ts" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex7.ts" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex8.ts" delete mode 100644 "\354\234\244\352\261\264\355\235\254/ex9.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/index.html" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/register.html" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex10.test.ts" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex10.ts" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex2.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex2.test.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex3.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex3.test.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex4.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex4.test.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex5.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex5.test.js" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex6.test.ts" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex6.ts" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex7.test.ts" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex7.ts" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex8.ts" delete mode 100644 "\354\234\244\354\230\201\355\227\214/ex9.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex1/book-edit.html" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex1/index.html" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex1/register.html" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex10.test.ts" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex10.ts" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex2.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex2.test.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex3.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex3.test.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex4.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex4.test.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex5.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex5.test.js" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex6.test.ts" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex6.ts" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex7.test.ts" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex7.ts" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex8.ts" delete mode 100644 "\354\235\264\353\217\231\354\234\244/ex9.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex1/book-edit.html" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex1/index.html" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex1/register.html" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex10.test.ts" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex10.ts" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex2.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex2.test.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex3.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex3.test.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex4.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex4.test.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex5.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex5.test.js" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex6.test.ts" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex6.ts" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex7.test.ts" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex7.ts" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex8.ts" delete mode 100644 "\354\235\264\354\210\230\353\257\274/ex9.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex1/book-edit.html" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex1/index.html" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex1/register.html" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex10.test.ts" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex10.ts" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex2.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex2.test.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex3.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex3.test.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex4.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex4.test.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex5.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex5.test.js" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex6.test.ts" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex6.ts" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex7.test.ts" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex7.ts" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex8.ts" delete mode 100644 "\354\235\264\354\235\270\354\210\230/ex9.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex1/book-edit.html" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex1/index.html" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex1/register.html" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex10.test.ts" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex10.ts" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex2.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex2.test.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex3.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex3.test.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex4.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex4.test.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex5.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex5.test.js" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex6.test.ts" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex6.ts" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex7.test.ts" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex7.ts" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex8.ts" delete mode 100644 "\354\235\264\355\225\230\353\212\230/ex9.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex1/book-edit.html" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex1/index.html" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex1/register.html" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex10.test.ts" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex10.ts" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex2.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex2.test.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex3.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex3.test.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex4.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex4.test.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex5.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex5.test.js" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex6.test.ts" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex6.ts" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex7.test.ts" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex7.ts" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex8.ts" delete mode 100644 "\354\236\204\354\210\230\354\247\204/ex9.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex1/book-edit.html" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex1/index.html" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex1/register.html" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex10.test.ts" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex10.ts" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex2.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex2.test.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex3.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex3.test.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex4.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex4.test.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex5.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex5.test.js" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex6.test.ts" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex6.ts" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex7.test.ts" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex7.ts" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex8.ts" delete mode 100644 "\354\240\225\354\212\271\354\232\251/ex9.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex1/book-edit.html" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex1/index.html" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex1/register.html" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex10.test.ts" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex10.ts" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex2.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex2.test.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex3.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex3.test.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex4.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex4.test.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex5.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex5.test.js" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex6.test.ts" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex6.ts" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex7.test.ts" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex7.ts" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex8.ts" delete mode 100644 "\354\240\225\354\227\260\354\261\204/ex9.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex1/book-edit.html" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex1/index.html" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex1/register.html" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex10.test.ts" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex10.ts" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex2.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex2.test.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex3.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex3.test.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex4.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex4.test.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex5.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex5.test.js" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex6.test.ts" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex6.ts" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex7.test.ts" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex7.ts" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex8.ts" delete mode 100644 "\354\240\225\354\244\221\354\235\274/ex9.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex1/book-edit.html" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex1/index.html" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex1/register.html" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex10.test.ts" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex10.ts" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex2.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex2.test.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex3.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex3.test.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex4.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex4.test.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex5.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex5.test.js" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex6.test.ts" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex6.ts" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex7.test.ts" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex7.ts" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex8.ts" delete mode 100644 "\354\265\234\354\204\240\354\240\225/ex9.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex1/book-edit.html" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex1/index.html" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex1/register.html" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex10.test.ts" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex10.ts" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex2.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex2.test.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex3.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex3.test.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex4.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex4.test.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex5.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex5.test.js" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex6.test.ts" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex6.ts" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex7.test.ts" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex7.ts" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex8.ts" delete mode 100644 "\354\265\234\355\230\201\355\203\234/ex9.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex1/book-edit.html" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex1/index.html" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex1/register.html" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex10.test.ts" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex10.ts" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex2.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex2.test.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex3.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex3.test.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex4.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex4.test.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex5.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex5.test.js" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex6.test.ts" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex6.ts" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex7.test.ts" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex7.ts" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex8.ts" delete mode 100644 "\354\265\234\355\232\250\354\204\235/ex9.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex1/book-edit.html" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex1/index.html" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex1/register.html" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex10.test.ts" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex10.ts" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex2.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex2.test.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex3.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex3.test.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex4.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex4.test.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex5.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex5.test.js" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex6.test.ts" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex6.ts" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex7.test.ts" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex7.ts" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex8.ts" delete mode 100644 "\355\225\234\354\204\261\353\257\274/ex9.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex1/book-edit.html" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex1/index.html" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex1/register.html" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex10.test.ts" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex10.ts" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex2.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex2.test.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex3.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex3.test.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex4.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex4.test.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex5.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex5.test.js" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex6.test.ts" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex6.ts" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex7.test.ts" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex7.ts" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex8.ts" delete mode 100644 "\355\225\250\355\230\225\354\243\274/ex9.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex1/book-edit.html" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex1/index.html" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex1/register.html" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex10.test.ts" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex10.ts" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex2.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex2.test.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex3.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex3.test.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex4.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex4.test.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex5.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex5.test.js" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex6.test.ts" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex6.ts" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex7.test.ts" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex7.ts" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex8.ts" delete mode 100644 "\355\231\215\354\206\214\355\235\254/ex9.js" diff --git "a/\352\271\200\352\260\200\354\227\260/ex1/book-edit.html" "b/\352\271\200\352\260\200\354\227\260/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\352\260\200\354\227\260/ex1/index.html" "b/\352\271\200\352\260\200\354\227\260/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\352\260\200\354\227\260/ex1/register.html" "b/\352\271\200\352\260\200\354\227\260/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\352\260\200\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\352\260\200\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\352\260\200\354\227\260/ex10.test.ts" "b/\352\271\200\352\260\200\354\227\260/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\352\260\200\354\227\260/ex10.ts" "b/\352\271\200\352\260\200\354\227\260/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\352\260\200\354\227\260/ex2.js" "b/\352\271\200\352\260\200\354\227\260/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\352\260\200\354\227\260/ex2.test.js" "b/\352\271\200\352\260\200\354\227\260/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\352\260\200\354\227\260/ex3.js" "b/\352\271\200\352\260\200\354\227\260/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\352\260\200\354\227\260/ex3.test.js" "b/\352\271\200\352\260\200\354\227\260/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\352\260\200\354\227\260/ex4.js" "b/\352\271\200\352\260\200\354\227\260/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\352\260\200\354\227\260/ex4.test.js" "b/\352\271\200\352\260\200\354\227\260/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\352\260\200\354\227\260/ex5.js" "b/\352\271\200\352\260\200\354\227\260/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\352\260\200\354\227\260/ex5.test.js" "b/\352\271\200\352\260\200\354\227\260/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\352\260\200\354\227\260/ex6.test.ts" "b/\352\271\200\352\260\200\354\227\260/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\352\260\200\354\227\260/ex6.ts" "b/\352\271\200\352\260\200\354\227\260/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\352\260\200\354\227\260/ex7.test.ts" "b/\352\271\200\352\260\200\354\227\260/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\352\260\200\354\227\260/ex7.ts" "b/\352\271\200\352\260\200\354\227\260/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\352\260\200\354\227\260/ex8.ts" "b/\352\271\200\352\260\200\354\227\260/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\352\260\200\354\227\260/ex9.js" "b/\352\271\200\352\260\200\354\227\260/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\352\260\200\354\227\260/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\352\271\200\353\217\231\354\227\260/ex1/book-edit.html" "b/\352\271\200\353\217\231\354\227\260/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\217\231\354\227\260/ex1/index.html" "b/\352\271\200\353\217\231\354\227\260/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\217\231\354\227\260/ex1/register.html" "b/\352\271\200\353\217\231\354\227\260/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\217\231\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\353\217\231\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\353\217\231\354\227\260/ex10.test.ts" "b/\352\271\200\353\217\231\354\227\260/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\353\217\231\354\227\260/ex10.ts" "b/\352\271\200\353\217\231\354\227\260/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\353\217\231\354\227\260/ex2.js" "b/\352\271\200\353\217\231\354\227\260/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\353\217\231\354\227\260/ex2.test.js" "b/\352\271\200\353\217\231\354\227\260/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\353\217\231\354\227\260/ex3.js" "b/\352\271\200\353\217\231\354\227\260/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\353\217\231\354\227\260/ex3.test.js" "b/\352\271\200\353\217\231\354\227\260/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\353\217\231\354\227\260/ex4.js" "b/\352\271\200\353\217\231\354\227\260/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\353\217\231\354\227\260/ex4.test.js" "b/\352\271\200\353\217\231\354\227\260/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\353\217\231\354\227\260/ex5.js" "b/\352\271\200\353\217\231\354\227\260/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\353\217\231\354\227\260/ex5.test.js" "b/\352\271\200\353\217\231\354\227\260/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\353\217\231\354\227\260/ex6.test.ts" "b/\352\271\200\353\217\231\354\227\260/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\353\217\231\354\227\260/ex6.ts" "b/\352\271\200\353\217\231\354\227\260/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\353\217\231\354\227\260/ex7.test.ts" "b/\352\271\200\353\217\231\354\227\260/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\353\217\231\354\227\260/ex7.ts" "b/\352\271\200\353\217\231\354\227\260/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\353\217\231\354\227\260/ex8.ts" "b/\352\271\200\353\217\231\354\227\260/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\353\217\231\354\227\260/ex9.js" "b/\352\271\200\353\217\231\354\227\260/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\353\217\231\354\227\260/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\352\271\200\353\217\231\354\235\200/ex1/book-edit.html" "b/\352\271\200\353\217\231\354\235\200/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\217\231\354\235\200/ex1/index.html" "b/\352\271\200\353\217\231\354\235\200/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\217\231\354\235\200/ex1/register.html" "b/\352\271\200\353\217\231\354\235\200/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\217\231\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\353\217\231\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\353\217\231\354\235\200/ex10.test.ts" "b/\352\271\200\353\217\231\354\235\200/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\353\217\231\354\235\200/ex10.ts" "b/\352\271\200\353\217\231\354\235\200/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\353\217\231\354\235\200/ex2.js" "b/\352\271\200\353\217\231\354\235\200/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\353\217\231\354\235\200/ex2.test.js" "b/\352\271\200\353\217\231\354\235\200/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\353\217\231\354\235\200/ex3.js" "b/\352\271\200\353\217\231\354\235\200/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\353\217\231\354\235\200/ex3.test.js" "b/\352\271\200\353\217\231\354\235\200/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\353\217\231\354\235\200/ex4.js" "b/\352\271\200\353\217\231\354\235\200/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\353\217\231\354\235\200/ex4.test.js" "b/\352\271\200\353\217\231\354\235\200/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\353\217\231\354\235\200/ex5.js" "b/\352\271\200\353\217\231\354\235\200/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\353\217\231\354\235\200/ex5.test.js" "b/\352\271\200\353\217\231\354\235\200/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\353\217\231\354\235\200/ex6.test.ts" "b/\352\271\200\353\217\231\354\235\200/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\353\217\231\354\235\200/ex6.ts" "b/\352\271\200\353\217\231\354\235\200/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\353\217\231\354\235\200/ex7.test.ts" "b/\352\271\200\353\217\231\354\235\200/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\353\217\231\354\235\200/ex7.ts" "b/\352\271\200\353\217\231\354\235\200/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\353\217\231\354\235\200/ex8.ts" "b/\352\271\200\353\217\231\354\235\200/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\353\217\231\354\235\200/ex9.js" "b/\352\271\200\353\217\231\354\235\200/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\353\217\231\354\235\200/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\352\271\200\353\257\270\352\260\225/ex1/book-edit.html" "b/\352\271\200\353\257\270\352\260\225/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\257\270\352\260\225/ex1/index.html" "b/\352\271\200\353\257\270\352\260\225/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\257\270\352\260\225/ex1/register.html" "b/\352\271\200\353\257\270\352\260\225/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\353\257\270\352\260\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\353\257\270\352\260\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\353\257\270\352\260\225/ex10.test.ts" "b/\352\271\200\353\257\270\352\260\225/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\353\257\270\352\260\225/ex10.ts" "b/\352\271\200\353\257\270\352\260\225/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\353\257\270\352\260\225/ex2.js" "b/\352\271\200\353\257\270\352\260\225/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\353\257\270\352\260\225/ex2.test.js" "b/\352\271\200\353\257\270\352\260\225/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\353\257\270\352\260\225/ex3.js" "b/\352\271\200\353\257\270\352\260\225/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\353\257\270\352\260\225/ex3.test.js" "b/\352\271\200\353\257\270\352\260\225/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\353\257\270\352\260\225/ex4.js" "b/\352\271\200\353\257\270\352\260\225/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\353\257\270\352\260\225/ex4.test.js" "b/\352\271\200\353\257\270\352\260\225/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\353\257\270\352\260\225/ex5.js" "b/\352\271\200\353\257\270\352\260\225/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\353\257\270\352\260\225/ex5.test.js" "b/\352\271\200\353\257\270\352\260\225/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\353\257\270\352\260\225/ex6.test.ts" "b/\352\271\200\353\257\270\352\260\225/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\353\257\270\352\260\225/ex6.ts" "b/\352\271\200\353\257\270\352\260\225/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\353\257\270\352\260\225/ex7.test.ts" "b/\352\271\200\353\257\270\352\260\225/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\353\257\270\352\260\225/ex7.ts" "b/\352\271\200\353\257\270\352\260\225/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\353\257\270\352\260\225/ex8.ts" "b/\352\271\200\353\257\270\352\260\225/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\353\257\270\352\260\225/ex9.js" "b/\352\271\200\353\257\270\352\260\225/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\353\257\270\352\260\225/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\352\271\200\354\203\201\355\230\204/ex1/book-edit.html" "b/\352\271\200\354\203\201\355\230\204/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\203\201\355\230\204/ex1/index.html" "b/\352\271\200\354\203\201\355\230\204/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\203\201\355\230\204/ex1/register.html" "b/\352\271\200\354\203\201\355\230\204/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\203\201\355\230\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\354\203\201\355\230\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\354\203\201\355\230\204/ex10.test.ts" "b/\352\271\200\354\203\201\355\230\204/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\354\203\201\355\230\204/ex10.ts" "b/\352\271\200\354\203\201\355\230\204/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\354\203\201\355\230\204/ex2.js" "b/\352\271\200\354\203\201\355\230\204/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\354\203\201\355\230\204/ex2.test.js" "b/\352\271\200\354\203\201\355\230\204/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\354\203\201\355\230\204/ex3.js" "b/\352\271\200\354\203\201\355\230\204/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\354\203\201\355\230\204/ex3.test.js" "b/\352\271\200\354\203\201\355\230\204/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\354\203\201\355\230\204/ex4.js" "b/\352\271\200\354\203\201\355\230\204/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\354\203\201\355\230\204/ex4.test.js" "b/\352\271\200\354\203\201\355\230\204/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\354\203\201\355\230\204/ex5.js" "b/\352\271\200\354\203\201\355\230\204/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\354\203\201\355\230\204/ex5.test.js" "b/\352\271\200\354\203\201\355\230\204/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\354\203\201\355\230\204/ex6.test.ts" "b/\352\271\200\354\203\201\355\230\204/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\354\203\201\355\230\204/ex6.ts" "b/\352\271\200\354\203\201\355\230\204/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\354\203\201\355\230\204/ex7.test.ts" "b/\352\271\200\354\203\201\355\230\204/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\354\203\201\355\230\204/ex7.ts" "b/\352\271\200\354\203\201\355\230\204/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\354\203\201\355\230\204/ex8.ts" "b/\352\271\200\354\203\201\355\230\204/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\354\203\201\355\230\204/ex9.js" "b/\352\271\200\354\203\201\355\230\204/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\354\203\201\355\230\204/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\352\271\200\354\204\261\354\247\204/ex1/book-edit.html" "b/\352\271\200\354\204\261\354\247\204/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\204\261\354\247\204/ex1/index.html" "b/\352\271\200\354\204\261\354\247\204/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\204\261\354\247\204/ex1/register.html" "b/\352\271\200\354\204\261\354\247\204/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\204\261\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\354\204\261\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\354\204\261\354\247\204/ex10.test.ts" "b/\352\271\200\354\204\261\354\247\204/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\354\204\261\354\247\204/ex10.ts" "b/\352\271\200\354\204\261\354\247\204/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\354\204\261\354\247\204/ex2.js" "b/\352\271\200\354\204\261\354\247\204/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\354\204\261\354\247\204/ex2.test.js" "b/\352\271\200\354\204\261\354\247\204/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\354\204\261\354\247\204/ex3.js" "b/\352\271\200\354\204\261\354\247\204/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\354\204\261\354\247\204/ex3.test.js" "b/\352\271\200\354\204\261\354\247\204/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\354\204\261\354\247\204/ex4.js" "b/\352\271\200\354\204\261\354\247\204/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\354\204\261\354\247\204/ex4.test.js" "b/\352\271\200\354\204\261\354\247\204/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\354\204\261\354\247\204/ex5.js" "b/\352\271\200\354\204\261\354\247\204/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\354\204\261\354\247\204/ex5.test.js" "b/\352\271\200\354\204\261\354\247\204/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\354\204\261\354\247\204/ex6.test.ts" "b/\352\271\200\354\204\261\354\247\204/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\354\204\261\354\247\204/ex6.ts" "b/\352\271\200\354\204\261\354\247\204/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\354\204\261\354\247\204/ex7.test.ts" "b/\352\271\200\354\204\261\354\247\204/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\354\204\261\354\247\204/ex7.ts" "b/\352\271\200\354\204\261\354\247\204/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\354\204\261\354\247\204/ex8.ts" "b/\352\271\200\354\204\261\354\247\204/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\354\204\261\354\247\204/ex9.js" "b/\352\271\200\354\204\261\354\247\204/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\354\204\261\354\247\204/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\352\271\200\354\235\270\354\230\201/ex1/book-edit.html" "b/\352\271\200\354\235\270\354\230\201/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\235\270\354\230\201/ex1/index.html" "b/\352\271\200\354\235\270\354\230\201/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\235\270\354\230\201/ex1/register.html" "b/\352\271\200\354\235\270\354\230\201/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\354\235\270\354\230\201/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\354\235\270\354\230\201/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\354\235\270\354\230\201/ex10.test.ts" "b/\352\271\200\354\235\270\354\230\201/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\354\235\270\354\230\201/ex10.ts" "b/\352\271\200\354\235\270\354\230\201/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\354\235\270\354\230\201/ex2.js" "b/\352\271\200\354\235\270\354\230\201/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\354\235\270\354\230\201/ex2.test.js" "b/\352\271\200\354\235\270\354\230\201/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\354\235\270\354\230\201/ex3.js" "b/\352\271\200\354\235\270\354\230\201/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\354\235\270\354\230\201/ex3.test.js" "b/\352\271\200\354\235\270\354\230\201/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\354\235\270\354\230\201/ex4.js" "b/\352\271\200\354\235\270\354\230\201/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\354\235\270\354\230\201/ex4.test.js" "b/\352\271\200\354\235\270\354\230\201/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\354\235\270\354\230\201/ex5.js" "b/\352\271\200\354\235\270\354\230\201/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\354\235\270\354\230\201/ex5.test.js" "b/\352\271\200\354\235\270\354\230\201/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\354\235\270\354\230\201/ex6.test.ts" "b/\352\271\200\354\235\270\354\230\201/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\354\235\270\354\230\201/ex6.ts" "b/\352\271\200\354\235\270\354\230\201/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\354\235\270\354\230\201/ex7.test.ts" "b/\352\271\200\354\235\270\354\230\201/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\354\235\270\354\230\201/ex7.ts" "b/\352\271\200\354\235\270\354\230\201/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\354\235\270\354\230\201/ex8.ts" "b/\352\271\200\354\235\270\354\230\201/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\354\235\270\354\230\201/ex9.js" "b/\352\271\200\354\235\270\354\230\201/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\354\235\270\354\230\201/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\352\271\200\354\261\204\354\232\264/ex2.js" "b/\352\271\200\354\261\204\354\232\264/ex2.js" index 6b95f04..a3a379c 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex2.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex2.js" @@ -1,4 +1,53 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; +const range = (start, end, step = start > end ? -1 : 1) => { + // 인자가 하나만 주어진 경우: end는 start가 됨, start는 1 또는 음수 + if (end === undefined) { + if (start === 0) { + return [0]; + } + end = start < 0 ? -1 : start; + start = start < 0 ? start : 1; // 음수일 경우 그대로 사용하고, 양수일 경우 1부터 시작 + } + + // step이 0인 경우: 무한 루프 방지 위해 [start]만 반환 + if (step === 0) { + return [start]; + } + + const result = []; + + // 소수점 처리를 위한 precision 설정 + const precision = Math.max( + (step.toString().split('.')[1] || '').length, + (start.toString().split('.')[1] || '').length, + (end.toString().split('.')[1] || '').length + ); + + // 정밀도를 가진 step, start, end를 위한 수치 + const factor = Math.pow(10, precision); + start = Math.round(start * factor); + end = Math.round(end * factor); + step = Math.round(step * factor); + + // step이 양수일 때 + if (step > 0) { + if (start <= end) { + for (let i = start; i <= end; i += step) { + // 결과를 원하는 precision으로 반올림 + result.push(parseFloat((i / factor).toFixed(precision))); + } + } + } + // step이 음수일 때 + else { + if (start >= end) { + for (let i = start; i >= end; i += step) { + // 결과를 원하는 precision으로 반올림 + result.push(parseFloat((i / factor).toFixed(precision))); + } + } + } + + return result; +}; module.exports = { range }; diff --git "a/\352\271\200\354\261\204\354\232\264/ex2.test.js" "b/\352\271\200\354\261\204\354\232\264/ex2.test.js" index cbdb2e8..99f8264 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex2.test.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex2.test.js" @@ -44,3 +44,4 @@ assert.deepStrictEqual( ); console.log(range(1, 2, 0.1)); +console.log(range(-5)) \ No newline at end of file diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/book-edit.html" "b/\352\271\200\355\225\264\354\233\220/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/index.html" "b/\352\271\200\355\225\264\354\233\220/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/register.html" "b/\352\271\200\355\225\264\354\233\220/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\352\271\200\355\225\264\354\233\220/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\352\271\200\355\225\264\354\233\220/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\352\271\200\355\225\264\354\233\220/ex10.test.ts" "b/\352\271\200\355\225\264\354\233\220/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\352\271\200\355\225\264\354\233\220/ex10.ts" "b/\352\271\200\355\225\264\354\233\220/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\355\225\264\354\233\220/ex2.js" "b/\352\271\200\355\225\264\354\233\220/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\352\271\200\355\225\264\354\233\220/ex2.test.js" "b/\352\271\200\355\225\264\354\233\220/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\352\271\200\355\225\264\354\233\220/ex3.js" "b/\352\271\200\355\225\264\354\233\220/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\352\271\200\355\225\264\354\233\220/ex3.test.js" "b/\352\271\200\355\225\264\354\233\220/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\352\271\200\355\225\264\354\233\220/ex4.js" "b/\352\271\200\355\225\264\354\233\220/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\352\271\200\355\225\264\354\233\220/ex4.test.js" "b/\352\271\200\355\225\264\354\233\220/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\352\271\200\355\225\264\354\233\220/ex5.js" "b/\352\271\200\355\225\264\354\233\220/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\352\271\200\355\225\264\354\233\220/ex5.test.js" "b/\352\271\200\355\225\264\354\233\220/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\352\271\200\355\225\264\354\233\220/ex6.test.ts" "b/\352\271\200\355\225\264\354\233\220/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\352\271\200\355\225\264\354\233\220/ex6.ts" "b/\352\271\200\355\225\264\354\233\220/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\352\271\200\355\225\264\354\233\220/ex7.test.ts" "b/\352\271\200\355\225\264\354\233\220/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\352\271\200\355\225\264\354\233\220/ex7.ts" "b/\352\271\200\355\225\264\354\233\220/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\352\271\200\355\225\264\354\233\220/ex8.ts" "b/\352\271\200\355\225\264\354\233\220/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\352\271\200\355\225\264\354\233\220/ex9.js" "b/\352\271\200\355\225\264\354\233\220/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\352\271\200\355\225\264\354\233\220/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\353\260\225\354\213\234\355\231\215/ex1/book-edit.html" "b/\353\260\225\354\213\234\355\231\215/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\213\234\355\231\215/ex1/index.html" "b/\353\260\225\354\213\234\355\231\215/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\213\234\355\231\215/ex1/register.html" "b/\353\260\225\354\213\234\355\231\215/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\213\234\355\231\215/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\353\260\225\354\213\234\355\231\215/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\353\260\225\354\213\234\355\231\215/ex10.test.ts" "b/\353\260\225\354\213\234\355\231\215/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\353\260\225\354\213\234\355\231\215/ex10.ts" "b/\353\260\225\354\213\234\355\231\215/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\353\260\225\354\213\234\355\231\215/ex2.js" "b/\353\260\225\354\213\234\355\231\215/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\353\260\225\354\213\234\355\231\215/ex2.test.js" "b/\353\260\225\354\213\234\355\231\215/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\353\260\225\354\213\234\355\231\215/ex3.js" "b/\353\260\225\354\213\234\355\231\215/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\353\260\225\354\213\234\355\231\215/ex3.test.js" "b/\353\260\225\354\213\234\355\231\215/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\353\260\225\354\213\234\355\231\215/ex4.js" "b/\353\260\225\354\213\234\355\231\215/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\353\260\225\354\213\234\355\231\215/ex4.test.js" "b/\353\260\225\354\213\234\355\231\215/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\353\260\225\354\213\234\355\231\215/ex5.js" "b/\353\260\225\354\213\234\355\231\215/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\353\260\225\354\213\234\355\231\215/ex5.test.js" "b/\353\260\225\354\213\234\355\231\215/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\353\260\225\354\213\234\355\231\215/ex6.test.ts" "b/\353\260\225\354\213\234\355\231\215/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\353\260\225\354\213\234\355\231\215/ex6.ts" "b/\353\260\225\354\213\234\355\231\215/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\353\260\225\354\213\234\355\231\215/ex7.test.ts" "b/\353\260\225\354\213\234\355\231\215/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\353\260\225\354\213\234\355\231\215/ex7.ts" "b/\353\260\225\354\213\234\355\231\215/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\353\260\225\354\213\234\355\231\215/ex8.ts" "b/\353\260\225\354\213\234\355\231\215/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\353\260\225\354\213\234\355\231\215/ex9.js" "b/\353\260\225\354\213\234\355\231\215/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\353\260\225\354\213\234\355\231\215/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\353\260\225\354\247\200\355\231\230/ex1/book-edit.html" "b/\353\260\225\354\247\200\355\231\230/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\247\200\355\231\230/ex1/index.html" "b/\353\260\225\354\247\200\355\231\230/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\247\200\355\231\230/ex1/register.html" "b/\353\260\225\354\247\200\355\231\230/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\247\200\355\231\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\353\260\225\354\247\200\355\231\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\353\260\225\354\247\200\355\231\230/ex10.test.ts" "b/\353\260\225\354\247\200\355\231\230/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\353\260\225\354\247\200\355\231\230/ex10.ts" "b/\353\260\225\354\247\200\355\231\230/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\353\260\225\354\247\200\355\231\230/ex2.js" "b/\353\260\225\354\247\200\355\231\230/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\353\260\225\354\247\200\355\231\230/ex2.test.js" "b/\353\260\225\354\247\200\355\231\230/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\353\260\225\354\247\200\355\231\230/ex3.js" "b/\353\260\225\354\247\200\355\231\230/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\353\260\225\354\247\200\355\231\230/ex3.test.js" "b/\353\260\225\354\247\200\355\231\230/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\353\260\225\354\247\200\355\231\230/ex4.js" "b/\353\260\225\354\247\200\355\231\230/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\353\260\225\354\247\200\355\231\230/ex4.test.js" "b/\353\260\225\354\247\200\355\231\230/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\353\260\225\354\247\200\355\231\230/ex5.js" "b/\353\260\225\354\247\200\355\231\230/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\353\260\225\354\247\200\355\231\230/ex5.test.js" "b/\353\260\225\354\247\200\355\231\230/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\353\260\225\354\247\200\355\231\230/ex6.test.ts" "b/\353\260\225\354\247\200\355\231\230/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\353\260\225\354\247\200\355\231\230/ex6.ts" "b/\353\260\225\354\247\200\355\231\230/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\353\260\225\354\247\200\355\231\230/ex7.test.ts" "b/\353\260\225\354\247\200\355\231\230/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\353\260\225\354\247\200\355\231\230/ex7.ts" "b/\353\260\225\354\247\200\355\231\230/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\353\260\225\354\247\200\355\231\230/ex8.ts" "b/\353\260\225\354\247\200\355\231\230/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\353\260\225\354\247\200\355\231\230/ex9.js" "b/\353\260\225\354\247\200\355\231\230/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\353\260\225\354\247\200\355\231\230/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\353\260\225\354\261\204\353\246\260/ex1/book-edit.html" "b/\353\260\225\354\261\204\353\246\260/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\261\204\353\246\260/ex1/index.html" "b/\353\260\225\354\261\204\353\246\260/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\261\204\353\246\260/ex1/register.html" "b/\353\260\225\354\261\204\353\246\260/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\353\260\225\354\261\204\353\246\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\353\260\225\354\261\204\353\246\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\353\260\225\354\261\204\353\246\260/ex10.test.ts" "b/\353\260\225\354\261\204\353\246\260/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\353\260\225\354\261\204\353\246\260/ex10.ts" "b/\353\260\225\354\261\204\353\246\260/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\353\260\225\354\261\204\353\246\260/ex2.js" "b/\353\260\225\354\261\204\353\246\260/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\353\260\225\354\261\204\353\246\260/ex2.test.js" "b/\353\260\225\354\261\204\353\246\260/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\353\260\225\354\261\204\353\246\260/ex3.js" "b/\353\260\225\354\261\204\353\246\260/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\353\260\225\354\261\204\353\246\260/ex3.test.js" "b/\353\260\225\354\261\204\353\246\260/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\353\260\225\354\261\204\353\246\260/ex4.js" "b/\353\260\225\354\261\204\353\246\260/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\353\260\225\354\261\204\353\246\260/ex4.test.js" "b/\353\260\225\354\261\204\353\246\260/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\353\260\225\354\261\204\353\246\260/ex5.js" "b/\353\260\225\354\261\204\353\246\260/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\353\260\225\354\261\204\353\246\260/ex5.test.js" "b/\353\260\225\354\261\204\353\246\260/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\353\260\225\354\261\204\353\246\260/ex6.test.ts" "b/\353\260\225\354\261\204\353\246\260/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\353\260\225\354\261\204\353\246\260/ex6.ts" "b/\353\260\225\354\261\204\353\246\260/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\353\260\225\354\261\204\353\246\260/ex7.test.ts" "b/\353\260\225\354\261\204\353\246\260/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\353\260\225\354\261\204\353\246\260/ex7.ts" "b/\353\260\225\354\261\204\353\246\260/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\353\260\225\354\261\204\353\246\260/ex8.ts" "b/\353\260\225\354\261\204\353\246\260/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\353\260\225\354\261\204\353\246\260/ex9.js" "b/\353\260\225\354\261\204\353\246\260/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\353\260\225\354\261\204\353\246\260/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\226\221\354\247\200\354\235\200/ex1/book-edit.html" "b/\354\226\221\354\247\200\354\235\200/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\226\221\354\247\200\354\235\200/ex1/index.html" "b/\354\226\221\354\247\200\354\235\200/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\226\221\354\247\200\354\235\200/ex1/register.html" "b/\354\226\221\354\247\200\354\235\200/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\226\221\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\226\221\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\226\221\354\247\200\354\235\200/ex10.test.ts" "b/\354\226\221\354\247\200\354\235\200/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\226\221\354\247\200\354\235\200/ex10.ts" "b/\354\226\221\354\247\200\354\235\200/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\226\221\354\247\200\354\235\200/ex2.js" "b/\354\226\221\354\247\200\354\235\200/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\226\221\354\247\200\354\235\200/ex2.test.js" "b/\354\226\221\354\247\200\354\235\200/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\226\221\354\247\200\354\235\200/ex3.js" "b/\354\226\221\354\247\200\354\235\200/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\226\221\354\247\200\354\235\200/ex3.test.js" "b/\354\226\221\354\247\200\354\235\200/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\226\221\354\247\200\354\235\200/ex4.js" "b/\354\226\221\354\247\200\354\235\200/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\226\221\354\247\200\354\235\200/ex4.test.js" "b/\354\226\221\354\247\200\354\235\200/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\226\221\354\247\200\354\235\200/ex5.js" "b/\354\226\221\354\247\200\354\235\200/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\226\221\354\247\200\354\235\200/ex5.test.js" "b/\354\226\221\354\247\200\354\235\200/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\226\221\354\247\200\354\235\200/ex6.test.ts" "b/\354\226\221\354\247\200\354\235\200/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\226\221\354\247\200\354\235\200/ex6.ts" "b/\354\226\221\354\247\200\354\235\200/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\226\221\354\247\200\354\235\200/ex7.test.ts" "b/\354\226\221\354\247\200\354\235\200/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\226\221\354\247\200\354\235\200/ex7.ts" "b/\354\226\221\354\247\200\354\235\200/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\226\221\354\247\200\354\235\200/ex8.ts" "b/\354\226\221\354\247\200\354\235\200/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\226\221\354\247\200\354\235\200/ex9.js" "b/\354\226\221\354\247\200\354\235\200/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\226\221\354\247\200\354\235\200/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\234\240\354\234\240\354\240\225/ex1/book-edit.html" "b/\354\234\240\354\234\240\354\240\225/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\240\354\234\240\354\240\225/ex1/index.html" "b/\354\234\240\354\234\240\354\240\225/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\240\354\234\240\354\240\225/ex1/register.html" "b/\354\234\240\354\234\240\354\240\225/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\240\354\234\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\234\240\354\234\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\234\240\354\234\240\354\240\225/ex10.test.ts" "b/\354\234\240\354\234\240\354\240\225/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\234\240\354\234\240\354\240\225/ex10.ts" "b/\354\234\240\354\234\240\354\240\225/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\234\240\354\234\240\354\240\225/ex2.js" "b/\354\234\240\354\234\240\354\240\225/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\234\240\354\234\240\354\240\225/ex2.test.js" "b/\354\234\240\354\234\240\354\240\225/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\234\240\354\234\240\354\240\225/ex3.js" "b/\354\234\240\354\234\240\354\240\225/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\234\240\354\234\240\354\240\225/ex3.test.js" "b/\354\234\240\354\234\240\354\240\225/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\234\240\354\234\240\354\240\225/ex4.js" "b/\354\234\240\354\234\240\354\240\225/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\234\240\354\234\240\354\240\225/ex4.test.js" "b/\354\234\240\354\234\240\354\240\225/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\234\240\354\234\240\354\240\225/ex5.js" "b/\354\234\240\354\234\240\354\240\225/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\234\240\354\234\240\354\240\225/ex5.test.js" "b/\354\234\240\354\234\240\354\240\225/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\234\240\354\234\240\354\240\225/ex6.test.ts" "b/\354\234\240\354\234\240\354\240\225/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\234\240\354\234\240\354\240\225/ex6.ts" "b/\354\234\240\354\234\240\354\240\225/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\234\240\354\234\240\354\240\225/ex7.test.ts" "b/\354\234\240\354\234\240\354\240\225/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\234\240\354\234\240\354\240\225/ex7.ts" "b/\354\234\240\354\234\240\354\240\225/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\234\240\354\234\240\354\240\225/ex8.ts" "b/\354\234\240\354\234\240\354\240\225/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\234\240\354\234\240\354\240\225/ex9.js" "b/\354\234\240\354\234\240\354\240\225/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\234\240\354\234\240\354\240\225/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\234\241\354\247\200\354\235\200/ex1/book-edit.html" "b/\354\234\241\354\247\200\354\235\200/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\241\354\247\200\354\235\200/ex1/index.html" "b/\354\234\241\354\247\200\354\235\200/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\241\354\247\200\354\235\200/ex1/register.html" "b/\354\234\241\354\247\200\354\235\200/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\241\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\234\241\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\234\241\354\247\200\354\235\200/ex10.test.ts" "b/\354\234\241\354\247\200\354\235\200/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\234\241\354\247\200\354\235\200/ex10.ts" "b/\354\234\241\354\247\200\354\235\200/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\234\241\354\247\200\354\235\200/ex2.js" "b/\354\234\241\354\247\200\354\235\200/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\234\241\354\247\200\354\235\200/ex2.test.js" "b/\354\234\241\354\247\200\354\235\200/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\234\241\354\247\200\354\235\200/ex3.js" "b/\354\234\241\354\247\200\354\235\200/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\234\241\354\247\200\354\235\200/ex3.test.js" "b/\354\234\241\354\247\200\354\235\200/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\234\241\354\247\200\354\235\200/ex4.js" "b/\354\234\241\354\247\200\354\235\200/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\234\241\354\247\200\354\235\200/ex4.test.js" "b/\354\234\241\354\247\200\354\235\200/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\234\241\354\247\200\354\235\200/ex5.js" "b/\354\234\241\354\247\200\354\235\200/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\234\241\354\247\200\354\235\200/ex5.test.js" "b/\354\234\241\354\247\200\354\235\200/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\234\241\354\247\200\354\235\200/ex6.test.ts" "b/\354\234\241\354\247\200\354\235\200/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\234\241\354\247\200\354\235\200/ex6.ts" "b/\354\234\241\354\247\200\354\235\200/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\234\241\354\247\200\354\235\200/ex7.test.ts" "b/\354\234\241\354\247\200\354\235\200/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\234\241\354\247\200\354\235\200/ex7.ts" "b/\354\234\241\354\247\200\354\235\200/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\234\241\354\247\200\354\235\200/ex8.ts" "b/\354\234\241\354\247\200\354\235\200/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\234\241\354\247\200\354\235\200/ex9.js" "b/\354\234\241\354\247\200\354\235\200/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\234\241\354\247\200\354\235\200/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\234\244\352\261\264\355\235\254/ex1/book-edit.html" "b/\354\234\244\352\261\264\355\235\254/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\244\352\261\264\355\235\254/ex1/index.html" "b/\354\234\244\352\261\264\355\235\254/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\244\352\261\264\355\235\254/ex1/register.html" "b/\354\234\244\352\261\264\355\235\254/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\244\352\261\264\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\234\244\352\261\264\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\234\244\352\261\264\355\235\254/ex10.test.ts" "b/\354\234\244\352\261\264\355\235\254/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\234\244\352\261\264\355\235\254/ex10.ts" "b/\354\234\244\352\261\264\355\235\254/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\234\244\352\261\264\355\235\254/ex2.js" "b/\354\234\244\352\261\264\355\235\254/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\234\244\352\261\264\355\235\254/ex2.test.js" "b/\354\234\244\352\261\264\355\235\254/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\234\244\352\261\264\355\235\254/ex3.js" "b/\354\234\244\352\261\264\355\235\254/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\234\244\352\261\264\355\235\254/ex3.test.js" "b/\354\234\244\352\261\264\355\235\254/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\234\244\352\261\264\355\235\254/ex4.js" "b/\354\234\244\352\261\264\355\235\254/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\234\244\352\261\264\355\235\254/ex4.test.js" "b/\354\234\244\352\261\264\355\235\254/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\234\244\352\261\264\355\235\254/ex5.js" "b/\354\234\244\352\261\264\355\235\254/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\234\244\352\261\264\355\235\254/ex5.test.js" "b/\354\234\244\352\261\264\355\235\254/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\234\244\352\261\264\355\235\254/ex6.test.ts" "b/\354\234\244\352\261\264\355\235\254/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\234\244\352\261\264\355\235\254/ex6.ts" "b/\354\234\244\352\261\264\355\235\254/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\234\244\352\261\264\355\235\254/ex7.test.ts" "b/\354\234\244\352\261\264\355\235\254/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\234\244\352\261\264\355\235\254/ex7.ts" "b/\354\234\244\352\261\264\355\235\254/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\234\244\352\261\264\355\235\254/ex8.ts" "b/\354\234\244\352\261\264\355\235\254/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\234\244\352\261\264\355\235\254/ex9.js" "b/\354\234\244\352\261\264\355\235\254/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\234\244\352\261\264\355\235\254/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" "b/\354\234\244\354\230\201\355\227\214/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/index.html" "b/\354\234\244\354\230\201\355\227\214/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/register.html" "b/\354\234\244\354\230\201\355\227\214/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\234\244\354\230\201\355\227\214/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\234\244\354\230\201\355\227\214/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\234\244\354\230\201\355\227\214/ex10.ts" "b/\354\234\244\354\230\201\355\227\214/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\234\244\354\230\201\355\227\214/ex2.js" "b/\354\234\244\354\230\201\355\227\214/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\234\244\354\230\201\355\227\214/ex2.test.js" "b/\354\234\244\354\230\201\355\227\214/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\234\244\354\230\201\355\227\214/ex3.js" "b/\354\234\244\354\230\201\355\227\214/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\234\244\354\230\201\355\227\214/ex3.test.js" "b/\354\234\244\354\230\201\355\227\214/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\234\244\354\230\201\355\227\214/ex4.js" "b/\354\234\244\354\230\201\355\227\214/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\234\244\354\230\201\355\227\214/ex4.test.js" "b/\354\234\244\354\230\201\355\227\214/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\234\244\354\230\201\355\227\214/ex5.js" "b/\354\234\244\354\230\201\355\227\214/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\234\244\354\230\201\355\227\214/ex5.test.js" "b/\354\234\244\354\230\201\355\227\214/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\234\244\354\230\201\355\227\214/ex6.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\234\244\354\230\201\355\227\214/ex6.ts" "b/\354\234\244\354\230\201\355\227\214/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.test.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\234\244\354\230\201\355\227\214/ex7.ts" "b/\354\234\244\354\230\201\355\227\214/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\234\244\354\230\201\355\227\214/ex8.ts" "b/\354\234\244\354\230\201\355\227\214/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\234\244\354\230\201\355\227\214/ex9.js" "b/\354\234\244\354\230\201\355\227\214/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\234\244\354\230\201\355\227\214/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\235\264\353\217\231\354\234\244/ex1/book-edit.html" "b/\354\235\264\353\217\231\354\234\244/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\353\217\231\354\234\244/ex1/index.html" "b/\354\235\264\353\217\231\354\234\244/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\353\217\231\354\234\244/ex1/register.html" "b/\354\235\264\353\217\231\354\234\244/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\353\217\231\354\234\244/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\235\264\353\217\231\354\234\244/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\235\264\353\217\231\354\234\244/ex10.test.ts" "b/\354\235\264\353\217\231\354\234\244/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\235\264\353\217\231\354\234\244/ex10.ts" "b/\354\235\264\353\217\231\354\234\244/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\235\264\353\217\231\354\234\244/ex2.js" "b/\354\235\264\353\217\231\354\234\244/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\235\264\353\217\231\354\234\244/ex2.test.js" "b/\354\235\264\353\217\231\354\234\244/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\235\264\353\217\231\354\234\244/ex3.js" "b/\354\235\264\353\217\231\354\234\244/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\235\264\353\217\231\354\234\244/ex3.test.js" "b/\354\235\264\353\217\231\354\234\244/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\235\264\353\217\231\354\234\244/ex4.js" "b/\354\235\264\353\217\231\354\234\244/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\235\264\353\217\231\354\234\244/ex4.test.js" "b/\354\235\264\353\217\231\354\234\244/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\235\264\353\217\231\354\234\244/ex5.js" "b/\354\235\264\353\217\231\354\234\244/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\235\264\353\217\231\354\234\244/ex5.test.js" "b/\354\235\264\353\217\231\354\234\244/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\235\264\353\217\231\354\234\244/ex6.test.ts" "b/\354\235\264\353\217\231\354\234\244/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\235\264\353\217\231\354\234\244/ex6.ts" "b/\354\235\264\353\217\231\354\234\244/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\235\264\353\217\231\354\234\244/ex7.test.ts" "b/\354\235\264\353\217\231\354\234\244/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\235\264\353\217\231\354\234\244/ex7.ts" "b/\354\235\264\353\217\231\354\234\244/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\235\264\353\217\231\354\234\244/ex8.ts" "b/\354\235\264\353\217\231\354\234\244/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\235\264\353\217\231\354\234\244/ex9.js" "b/\354\235\264\353\217\231\354\234\244/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\235\264\353\217\231\354\234\244/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\235\264\354\210\230\353\257\274/ex1/book-edit.html" "b/\354\235\264\354\210\230\353\257\274/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\354\210\230\353\257\274/ex1/index.html" "b/\354\235\264\354\210\230\353\257\274/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\354\210\230\353\257\274/ex1/register.html" "b/\354\235\264\354\210\230\353\257\274/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\354\210\230\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\235\264\354\210\230\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\235\264\354\210\230\353\257\274/ex10.test.ts" "b/\354\235\264\354\210\230\353\257\274/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\235\264\354\210\230\353\257\274/ex10.ts" "b/\354\235\264\354\210\230\353\257\274/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\235\264\354\210\230\353\257\274/ex2.js" "b/\354\235\264\354\210\230\353\257\274/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\235\264\354\210\230\353\257\274/ex2.test.js" "b/\354\235\264\354\210\230\353\257\274/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\235\264\354\210\230\353\257\274/ex3.js" "b/\354\235\264\354\210\230\353\257\274/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\235\264\354\210\230\353\257\274/ex3.test.js" "b/\354\235\264\354\210\230\353\257\274/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\235\264\354\210\230\353\257\274/ex4.js" "b/\354\235\264\354\210\230\353\257\274/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\235\264\354\210\230\353\257\274/ex4.test.js" "b/\354\235\264\354\210\230\353\257\274/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\235\264\354\210\230\353\257\274/ex5.js" "b/\354\235\264\354\210\230\353\257\274/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\235\264\354\210\230\353\257\274/ex5.test.js" "b/\354\235\264\354\210\230\353\257\274/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\235\264\354\210\230\353\257\274/ex6.test.ts" "b/\354\235\264\354\210\230\353\257\274/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\235\264\354\210\230\353\257\274/ex6.ts" "b/\354\235\264\354\210\230\353\257\274/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\235\264\354\210\230\353\257\274/ex7.test.ts" "b/\354\235\264\354\210\230\353\257\274/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\235\264\354\210\230\353\257\274/ex7.ts" "b/\354\235\264\354\210\230\353\257\274/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\235\264\354\210\230\353\257\274/ex8.ts" "b/\354\235\264\354\210\230\353\257\274/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\235\264\354\210\230\353\257\274/ex9.js" "b/\354\235\264\354\210\230\353\257\274/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\235\264\354\210\230\353\257\274/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\235\264\354\235\270\354\210\230/ex1/book-edit.html" "b/\354\235\264\354\235\270\354\210\230/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\354\235\270\354\210\230/ex1/index.html" "b/\354\235\264\354\235\270\354\210\230/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\354\235\270\354\210\230/ex1/register.html" "b/\354\235\264\354\235\270\354\210\230/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\354\235\270\354\210\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\235\264\354\235\270\354\210\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\235\264\354\235\270\354\210\230/ex10.test.ts" "b/\354\235\264\354\235\270\354\210\230/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\235\264\354\235\270\354\210\230/ex10.ts" "b/\354\235\264\354\235\270\354\210\230/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\235\264\354\235\270\354\210\230/ex2.js" "b/\354\235\264\354\235\270\354\210\230/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\235\264\354\235\270\354\210\230/ex2.test.js" "b/\354\235\264\354\235\270\354\210\230/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\235\264\354\235\270\354\210\230/ex3.js" "b/\354\235\264\354\235\270\354\210\230/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\235\264\354\235\270\354\210\230/ex3.test.js" "b/\354\235\264\354\235\270\354\210\230/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\235\264\354\235\270\354\210\230/ex4.js" "b/\354\235\264\354\235\270\354\210\230/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\235\264\354\235\270\354\210\230/ex4.test.js" "b/\354\235\264\354\235\270\354\210\230/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\235\264\354\235\270\354\210\230/ex5.js" "b/\354\235\264\354\235\270\354\210\230/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\235\264\354\235\270\354\210\230/ex5.test.js" "b/\354\235\264\354\235\270\354\210\230/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\235\264\354\235\270\354\210\230/ex6.test.ts" "b/\354\235\264\354\235\270\354\210\230/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\235\264\354\235\270\354\210\230/ex6.ts" "b/\354\235\264\354\235\270\354\210\230/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\235\264\354\235\270\354\210\230/ex7.test.ts" "b/\354\235\264\354\235\270\354\210\230/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\235\264\354\235\270\354\210\230/ex7.ts" "b/\354\235\264\354\235\270\354\210\230/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\235\264\354\235\270\354\210\230/ex8.ts" "b/\354\235\264\354\235\270\354\210\230/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\235\264\354\235\270\354\210\230/ex9.js" "b/\354\235\264\354\235\270\354\210\230/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\235\264\354\235\270\354\210\230/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\235\264\355\225\230\353\212\230/ex1/book-edit.html" "b/\354\235\264\355\225\230\353\212\230/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\355\225\230\353\212\230/ex1/index.html" "b/\354\235\264\355\225\230\353\212\230/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\355\225\230\353\212\230/ex1/register.html" "b/\354\235\264\355\225\230\353\212\230/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\235\264\355\225\230\353\212\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\235\264\355\225\230\353\212\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\235\264\355\225\230\353\212\230/ex10.test.ts" "b/\354\235\264\355\225\230\353\212\230/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\235\264\355\225\230\353\212\230/ex10.ts" "b/\354\235\264\355\225\230\353\212\230/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\235\264\355\225\230\353\212\230/ex2.js" "b/\354\235\264\355\225\230\353\212\230/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\235\264\355\225\230\353\212\230/ex2.test.js" "b/\354\235\264\355\225\230\353\212\230/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\235\264\355\225\230\353\212\230/ex3.js" "b/\354\235\264\355\225\230\353\212\230/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\235\264\355\225\230\353\212\230/ex3.test.js" "b/\354\235\264\355\225\230\353\212\230/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\235\264\355\225\230\353\212\230/ex4.js" "b/\354\235\264\355\225\230\353\212\230/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\235\264\355\225\230\353\212\230/ex4.test.js" "b/\354\235\264\355\225\230\353\212\230/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\235\264\355\225\230\353\212\230/ex5.js" "b/\354\235\264\355\225\230\353\212\230/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\235\264\355\225\230\353\212\230/ex5.test.js" "b/\354\235\264\355\225\230\353\212\230/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\235\264\355\225\230\353\212\230/ex6.test.ts" "b/\354\235\264\355\225\230\353\212\230/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\235\264\355\225\230\353\212\230/ex6.ts" "b/\354\235\264\355\225\230\353\212\230/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\235\264\355\225\230\353\212\230/ex7.test.ts" "b/\354\235\264\355\225\230\353\212\230/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\235\264\355\225\230\353\212\230/ex7.ts" "b/\354\235\264\355\225\230\353\212\230/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\235\264\355\225\230\353\212\230/ex8.ts" "b/\354\235\264\355\225\230\353\212\230/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\235\264\355\225\230\353\212\230/ex9.js" "b/\354\235\264\355\225\230\353\212\230/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\235\264\355\225\230\353\212\230/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\236\204\354\210\230\354\247\204/ex1/book-edit.html" "b/\354\236\204\354\210\230\354\247\204/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\236\204\354\210\230\354\247\204/ex1/index.html" "b/\354\236\204\354\210\230\354\247\204/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\236\204\354\210\230\354\247\204/ex1/register.html" "b/\354\236\204\354\210\230\354\247\204/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\236\204\354\210\230\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\236\204\354\210\230\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\236\204\354\210\230\354\247\204/ex10.test.ts" "b/\354\236\204\354\210\230\354\247\204/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\236\204\354\210\230\354\247\204/ex10.ts" "b/\354\236\204\354\210\230\354\247\204/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\236\204\354\210\230\354\247\204/ex2.js" "b/\354\236\204\354\210\230\354\247\204/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\236\204\354\210\230\354\247\204/ex2.test.js" "b/\354\236\204\354\210\230\354\247\204/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\236\204\354\210\230\354\247\204/ex3.js" "b/\354\236\204\354\210\230\354\247\204/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\236\204\354\210\230\354\247\204/ex3.test.js" "b/\354\236\204\354\210\230\354\247\204/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\236\204\354\210\230\354\247\204/ex4.js" "b/\354\236\204\354\210\230\354\247\204/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\236\204\354\210\230\354\247\204/ex4.test.js" "b/\354\236\204\354\210\230\354\247\204/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\236\204\354\210\230\354\247\204/ex5.js" "b/\354\236\204\354\210\230\354\247\204/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\236\204\354\210\230\354\247\204/ex5.test.js" "b/\354\236\204\354\210\230\354\247\204/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\236\204\354\210\230\354\247\204/ex6.test.ts" "b/\354\236\204\354\210\230\354\247\204/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\236\204\354\210\230\354\247\204/ex6.ts" "b/\354\236\204\354\210\230\354\247\204/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\236\204\354\210\230\354\247\204/ex7.test.ts" "b/\354\236\204\354\210\230\354\247\204/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\236\204\354\210\230\354\247\204/ex7.ts" "b/\354\236\204\354\210\230\354\247\204/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\236\204\354\210\230\354\247\204/ex8.ts" "b/\354\236\204\354\210\230\354\247\204/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\236\204\354\210\230\354\247\204/ex9.js" "b/\354\236\204\354\210\230\354\247\204/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\236\204\354\210\230\354\247\204/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\240\225\354\212\271\354\232\251/ex1/book-edit.html" "b/\354\240\225\354\212\271\354\232\251/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\212\271\354\232\251/ex1/index.html" "b/\354\240\225\354\212\271\354\232\251/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\212\271\354\232\251/ex1/register.html" "b/\354\240\225\354\212\271\354\232\251/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\212\271\354\232\251/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\240\225\354\212\271\354\232\251/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\240\225\354\212\271\354\232\251/ex10.test.ts" "b/\354\240\225\354\212\271\354\232\251/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\240\225\354\212\271\354\232\251/ex10.ts" "b/\354\240\225\354\212\271\354\232\251/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\240\225\354\212\271\354\232\251/ex2.js" "b/\354\240\225\354\212\271\354\232\251/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\240\225\354\212\271\354\232\251/ex2.test.js" "b/\354\240\225\354\212\271\354\232\251/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\240\225\354\212\271\354\232\251/ex3.js" "b/\354\240\225\354\212\271\354\232\251/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\240\225\354\212\271\354\232\251/ex3.test.js" "b/\354\240\225\354\212\271\354\232\251/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\240\225\354\212\271\354\232\251/ex4.js" "b/\354\240\225\354\212\271\354\232\251/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\240\225\354\212\271\354\232\251/ex4.test.js" "b/\354\240\225\354\212\271\354\232\251/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\240\225\354\212\271\354\232\251/ex5.js" "b/\354\240\225\354\212\271\354\232\251/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\240\225\354\212\271\354\232\251/ex5.test.js" "b/\354\240\225\354\212\271\354\232\251/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\240\225\354\212\271\354\232\251/ex6.test.ts" "b/\354\240\225\354\212\271\354\232\251/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\240\225\354\212\271\354\232\251/ex6.ts" "b/\354\240\225\354\212\271\354\232\251/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\240\225\354\212\271\354\232\251/ex7.test.ts" "b/\354\240\225\354\212\271\354\232\251/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\240\225\354\212\271\354\232\251/ex7.ts" "b/\354\240\225\354\212\271\354\232\251/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\240\225\354\212\271\354\232\251/ex8.ts" "b/\354\240\225\354\212\271\354\232\251/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\240\225\354\212\271\354\232\251/ex9.js" "b/\354\240\225\354\212\271\354\232\251/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\240\225\354\212\271\354\232\251/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\240\225\354\227\260\354\261\204/ex1/book-edit.html" "b/\354\240\225\354\227\260\354\261\204/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\227\260\354\261\204/ex1/index.html" "b/\354\240\225\354\227\260\354\261\204/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\227\260\354\261\204/ex1/register.html" "b/\354\240\225\354\227\260\354\261\204/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\227\260\354\261\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\240\225\354\227\260\354\261\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\240\225\354\227\260\354\261\204/ex10.test.ts" "b/\354\240\225\354\227\260\354\261\204/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\240\225\354\227\260\354\261\204/ex10.ts" "b/\354\240\225\354\227\260\354\261\204/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\240\225\354\227\260\354\261\204/ex2.js" "b/\354\240\225\354\227\260\354\261\204/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\240\225\354\227\260\354\261\204/ex2.test.js" "b/\354\240\225\354\227\260\354\261\204/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\240\225\354\227\260\354\261\204/ex3.js" "b/\354\240\225\354\227\260\354\261\204/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\240\225\354\227\260\354\261\204/ex3.test.js" "b/\354\240\225\354\227\260\354\261\204/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\240\225\354\227\260\354\261\204/ex4.js" "b/\354\240\225\354\227\260\354\261\204/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\240\225\354\227\260\354\261\204/ex4.test.js" "b/\354\240\225\354\227\260\354\261\204/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\240\225\354\227\260\354\261\204/ex5.js" "b/\354\240\225\354\227\260\354\261\204/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\240\225\354\227\260\354\261\204/ex5.test.js" "b/\354\240\225\354\227\260\354\261\204/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\240\225\354\227\260\354\261\204/ex6.test.ts" "b/\354\240\225\354\227\260\354\261\204/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\240\225\354\227\260\354\261\204/ex6.ts" "b/\354\240\225\354\227\260\354\261\204/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\240\225\354\227\260\354\261\204/ex7.test.ts" "b/\354\240\225\354\227\260\354\261\204/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\240\225\354\227\260\354\261\204/ex7.ts" "b/\354\240\225\354\227\260\354\261\204/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\240\225\354\227\260\354\261\204/ex8.ts" "b/\354\240\225\354\227\260\354\261\204/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\240\225\354\227\260\354\261\204/ex9.js" "b/\354\240\225\354\227\260\354\261\204/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\240\225\354\227\260\354\261\204/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\240\225\354\244\221\354\235\274/ex1/book-edit.html" "b/\354\240\225\354\244\221\354\235\274/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\244\221\354\235\274/ex1/index.html" "b/\354\240\225\354\244\221\354\235\274/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\244\221\354\235\274/ex1/register.html" "b/\354\240\225\354\244\221\354\235\274/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\240\225\354\244\221\354\235\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\240\225\354\244\221\354\235\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\240\225\354\244\221\354\235\274/ex10.test.ts" "b/\354\240\225\354\244\221\354\235\274/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\240\225\354\244\221\354\235\274/ex10.ts" "b/\354\240\225\354\244\221\354\235\274/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\240\225\354\244\221\354\235\274/ex2.js" "b/\354\240\225\354\244\221\354\235\274/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\240\225\354\244\221\354\235\274/ex2.test.js" "b/\354\240\225\354\244\221\354\235\274/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\240\225\354\244\221\354\235\274/ex3.js" "b/\354\240\225\354\244\221\354\235\274/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\240\225\354\244\221\354\235\274/ex3.test.js" "b/\354\240\225\354\244\221\354\235\274/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\240\225\354\244\221\354\235\274/ex4.js" "b/\354\240\225\354\244\221\354\235\274/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\240\225\354\244\221\354\235\274/ex4.test.js" "b/\354\240\225\354\244\221\354\235\274/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\240\225\354\244\221\354\235\274/ex5.js" "b/\354\240\225\354\244\221\354\235\274/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\240\225\354\244\221\354\235\274/ex5.test.js" "b/\354\240\225\354\244\221\354\235\274/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\240\225\354\244\221\354\235\274/ex6.test.ts" "b/\354\240\225\354\244\221\354\235\274/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\240\225\354\244\221\354\235\274/ex6.ts" "b/\354\240\225\354\244\221\354\235\274/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\240\225\354\244\221\354\235\274/ex7.test.ts" "b/\354\240\225\354\244\221\354\235\274/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\240\225\354\244\221\354\235\274/ex7.ts" "b/\354\240\225\354\244\221\354\235\274/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\240\225\354\244\221\354\235\274/ex8.ts" "b/\354\240\225\354\244\221\354\235\274/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\240\225\354\244\221\354\235\274/ex9.js" "b/\354\240\225\354\244\221\354\235\274/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\240\225\354\244\221\354\235\274/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\265\234\354\204\240\354\240\225/ex1/book-edit.html" "b/\354\265\234\354\204\240\354\240\225/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\354\204\240\354\240\225/ex1/index.html" "b/\354\265\234\354\204\240\354\240\225/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\354\204\240\354\240\225/ex1/register.html" "b/\354\265\234\354\204\240\354\240\225/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\354\204\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\265\234\354\204\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\265\234\354\204\240\354\240\225/ex10.test.ts" "b/\354\265\234\354\204\240\354\240\225/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\265\234\354\204\240\354\240\225/ex10.ts" "b/\354\265\234\354\204\240\354\240\225/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\265\234\354\204\240\354\240\225/ex2.js" "b/\354\265\234\354\204\240\354\240\225/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\265\234\354\204\240\354\240\225/ex2.test.js" "b/\354\265\234\354\204\240\354\240\225/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\265\234\354\204\240\354\240\225/ex3.js" "b/\354\265\234\354\204\240\354\240\225/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\265\234\354\204\240\354\240\225/ex3.test.js" "b/\354\265\234\354\204\240\354\240\225/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\265\234\354\204\240\354\240\225/ex4.js" "b/\354\265\234\354\204\240\354\240\225/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\265\234\354\204\240\354\240\225/ex4.test.js" "b/\354\265\234\354\204\240\354\240\225/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\265\234\354\204\240\354\240\225/ex5.js" "b/\354\265\234\354\204\240\354\240\225/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\265\234\354\204\240\354\240\225/ex5.test.js" "b/\354\265\234\354\204\240\354\240\225/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\265\234\354\204\240\354\240\225/ex6.test.ts" "b/\354\265\234\354\204\240\354\240\225/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\265\234\354\204\240\354\240\225/ex6.ts" "b/\354\265\234\354\204\240\354\240\225/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\265\234\354\204\240\354\240\225/ex7.test.ts" "b/\354\265\234\354\204\240\354\240\225/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\265\234\354\204\240\354\240\225/ex7.ts" "b/\354\265\234\354\204\240\354\240\225/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\265\234\354\204\240\354\240\225/ex8.ts" "b/\354\265\234\354\204\240\354\240\225/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\265\234\354\204\240\354\240\225/ex9.js" "b/\354\265\234\354\204\240\354\240\225/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\265\234\354\204\240\354\240\225/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\265\234\355\230\201\355\203\234/ex1/book-edit.html" "b/\354\265\234\355\230\201\355\203\234/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\355\230\201\355\203\234/ex1/index.html" "b/\354\265\234\355\230\201\355\203\234/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\355\230\201\355\203\234/ex1/register.html" "b/\354\265\234\355\230\201\355\203\234/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\355\230\201\355\203\234/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\265\234\355\230\201\355\203\234/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\265\234\355\230\201\355\203\234/ex10.test.ts" "b/\354\265\234\355\230\201\355\203\234/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\265\234\355\230\201\355\203\234/ex10.ts" "b/\354\265\234\355\230\201\355\203\234/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\265\234\355\230\201\355\203\234/ex2.js" "b/\354\265\234\355\230\201\355\203\234/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\265\234\355\230\201\355\203\234/ex2.test.js" "b/\354\265\234\355\230\201\355\203\234/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\265\234\355\230\201\355\203\234/ex3.js" "b/\354\265\234\355\230\201\355\203\234/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\265\234\355\230\201\355\203\234/ex3.test.js" "b/\354\265\234\355\230\201\355\203\234/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\265\234\355\230\201\355\203\234/ex4.js" "b/\354\265\234\355\230\201\355\203\234/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\265\234\355\230\201\355\203\234/ex4.test.js" "b/\354\265\234\355\230\201\355\203\234/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\265\234\355\230\201\355\203\234/ex5.js" "b/\354\265\234\355\230\201\355\203\234/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\265\234\355\230\201\355\203\234/ex5.test.js" "b/\354\265\234\355\230\201\355\203\234/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\265\234\355\230\201\355\203\234/ex6.test.ts" "b/\354\265\234\355\230\201\355\203\234/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\265\234\355\230\201\355\203\234/ex6.ts" "b/\354\265\234\355\230\201\355\203\234/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\265\234\355\230\201\355\203\234/ex7.test.ts" "b/\354\265\234\355\230\201\355\203\234/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\265\234\355\230\201\355\203\234/ex7.ts" "b/\354\265\234\355\230\201\355\203\234/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\265\234\355\230\201\355\203\234/ex8.ts" "b/\354\265\234\355\230\201\355\203\234/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\265\234\355\230\201\355\203\234/ex9.js" "b/\354\265\234\355\230\201\355\203\234/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\265\234\355\230\201\355\203\234/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\354\265\234\355\232\250\354\204\235/ex1/book-edit.html" "b/\354\265\234\355\232\250\354\204\235/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\355\232\250\354\204\235/ex1/index.html" "b/\354\265\234\355\232\250\354\204\235/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\355\232\250\354\204\235/ex1/register.html" "b/\354\265\234\355\232\250\354\204\235/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\354\265\234\355\232\250\354\204\235/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\354\265\234\355\232\250\354\204\235/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\354\265\234\355\232\250\354\204\235/ex10.test.ts" "b/\354\265\234\355\232\250\354\204\235/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\354\265\234\355\232\250\354\204\235/ex10.ts" "b/\354\265\234\355\232\250\354\204\235/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\354\265\234\355\232\250\354\204\235/ex2.js" "b/\354\265\234\355\232\250\354\204\235/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\354\265\234\355\232\250\354\204\235/ex2.test.js" "b/\354\265\234\355\232\250\354\204\235/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\354\265\234\355\232\250\354\204\235/ex3.js" "b/\354\265\234\355\232\250\354\204\235/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\354\265\234\355\232\250\354\204\235/ex3.test.js" "b/\354\265\234\355\232\250\354\204\235/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\354\265\234\355\232\250\354\204\235/ex4.js" "b/\354\265\234\355\232\250\354\204\235/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\354\265\234\355\232\250\354\204\235/ex4.test.js" "b/\354\265\234\355\232\250\354\204\235/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\354\265\234\355\232\250\354\204\235/ex5.js" "b/\354\265\234\355\232\250\354\204\235/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\354\265\234\355\232\250\354\204\235/ex5.test.js" "b/\354\265\234\355\232\250\354\204\235/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\354\265\234\355\232\250\354\204\235/ex6.test.ts" "b/\354\265\234\355\232\250\354\204\235/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\354\265\234\355\232\250\354\204\235/ex6.ts" "b/\354\265\234\355\232\250\354\204\235/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\354\265\234\355\232\250\354\204\235/ex7.test.ts" "b/\354\265\234\355\232\250\354\204\235/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\354\265\234\355\232\250\354\204\235/ex7.ts" "b/\354\265\234\355\232\250\354\204\235/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\354\265\234\355\232\250\354\204\235/ex8.ts" "b/\354\265\234\355\232\250\354\204\235/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\354\265\234\355\232\250\354\204\235/ex9.js" "b/\354\265\234\355\232\250\354\204\235/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\354\265\234\355\232\250\354\204\235/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\355\225\234\354\204\261\353\257\274/ex1/book-edit.html" "b/\355\225\234\354\204\261\353\257\274/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\225\234\354\204\261\353\257\274/ex1/index.html" "b/\355\225\234\354\204\261\353\257\274/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\225\234\354\204\261\353\257\274/ex1/register.html" "b/\355\225\234\354\204\261\353\257\274/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\225\234\354\204\261\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\355\225\234\354\204\261\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\355\225\234\354\204\261\353\257\274/ex10.test.ts" "b/\355\225\234\354\204\261\353\257\274/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\355\225\234\354\204\261\353\257\274/ex10.ts" "b/\355\225\234\354\204\261\353\257\274/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\355\225\234\354\204\261\353\257\274/ex2.js" "b/\355\225\234\354\204\261\353\257\274/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\355\225\234\354\204\261\353\257\274/ex2.test.js" "b/\355\225\234\354\204\261\353\257\274/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\355\225\234\354\204\261\353\257\274/ex3.js" "b/\355\225\234\354\204\261\353\257\274/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\355\225\234\354\204\261\353\257\274/ex3.test.js" "b/\355\225\234\354\204\261\353\257\274/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\355\225\234\354\204\261\353\257\274/ex4.js" "b/\355\225\234\354\204\261\353\257\274/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\355\225\234\354\204\261\353\257\274/ex4.test.js" "b/\355\225\234\354\204\261\353\257\274/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\355\225\234\354\204\261\353\257\274/ex5.js" "b/\355\225\234\354\204\261\353\257\274/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\355\225\234\354\204\261\353\257\274/ex5.test.js" "b/\355\225\234\354\204\261\353\257\274/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\355\225\234\354\204\261\353\257\274/ex6.test.ts" "b/\355\225\234\354\204\261\353\257\274/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\355\225\234\354\204\261\353\257\274/ex6.ts" "b/\355\225\234\354\204\261\353\257\274/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\355\225\234\354\204\261\353\257\274/ex7.test.ts" "b/\355\225\234\354\204\261\353\257\274/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\355\225\234\354\204\261\353\257\274/ex7.ts" "b/\355\225\234\354\204\261\353\257\274/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\355\225\234\354\204\261\353\257\274/ex8.ts" "b/\355\225\234\354\204\261\353\257\274/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\355\225\234\354\204\261\353\257\274/ex9.js" "b/\355\225\234\354\204\261\353\257\274/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\355\225\234\354\204\261\353\257\274/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\355\225\250\355\230\225\354\243\274/ex1/book-edit.html" "b/\355\225\250\355\230\225\354\243\274/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\225\250\355\230\225\354\243\274/ex1/index.html" "b/\355\225\250\355\230\225\354\243\274/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\225\250\355\230\225\354\243\274/ex1/register.html" "b/\355\225\250\355\230\225\354\243\274/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\225\250\355\230\225\354\243\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\355\225\250\355\230\225\354\243\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\355\225\250\355\230\225\354\243\274/ex10.test.ts" "b/\355\225\250\355\230\225\354\243\274/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\355\225\250\355\230\225\354\243\274/ex10.ts" "b/\355\225\250\355\230\225\354\243\274/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\355\225\250\355\230\225\354\243\274/ex2.js" "b/\355\225\250\355\230\225\354\243\274/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\355\225\250\355\230\225\354\243\274/ex2.test.js" "b/\355\225\250\355\230\225\354\243\274/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\355\225\250\355\230\225\354\243\274/ex3.js" "b/\355\225\250\355\230\225\354\243\274/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\355\225\250\355\230\225\354\243\274/ex3.test.js" "b/\355\225\250\355\230\225\354\243\274/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\355\225\250\355\230\225\354\243\274/ex4.js" "b/\355\225\250\355\230\225\354\243\274/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\355\225\250\355\230\225\354\243\274/ex4.test.js" "b/\355\225\250\355\230\225\354\243\274/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\355\225\250\355\230\225\354\243\274/ex5.js" "b/\355\225\250\355\230\225\354\243\274/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\355\225\250\355\230\225\354\243\274/ex5.test.js" "b/\355\225\250\355\230\225\354\243\274/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\355\225\250\355\230\225\354\243\274/ex6.test.ts" "b/\355\225\250\355\230\225\354\243\274/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\355\225\250\355\230\225\354\243\274/ex6.ts" "b/\355\225\250\355\230\225\354\243\274/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\355\225\250\355\230\225\354\243\274/ex7.test.ts" "b/\355\225\250\355\230\225\354\243\274/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\355\225\250\355\230\225\354\243\274/ex7.ts" "b/\355\225\250\355\230\225\354\243\274/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\355\225\250\355\230\225\354\243\274/ex8.ts" "b/\355\225\250\355\230\225\354\243\274/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\355\225\250\355\230\225\354\243\274/ex9.js" "b/\355\225\250\355\230\225\354\243\274/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\355\225\250\355\230\225\354\243\274/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} diff --git "a/\355\231\215\354\206\214\355\235\254/ex1/book-edit.html" "b/\355\231\215\354\206\214\355\235\254/ex1/book-edit.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\231\215\354\206\214\355\235\254/ex1/index.html" "b/\355\231\215\354\206\214\355\235\254/ex1/index.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\231\215\354\206\214\355\235\254/ex1/register.html" "b/\355\231\215\354\206\214\355\235\254/ex1/register.html" deleted file mode 100644 index e69de29..0000000 diff --git "a/\355\231\215\354\206\214\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" "b/\355\231\215\354\206\214\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" deleted file mode 100644 index fcebecb..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex1/\354\227\254\352\270\260\354\227\220tw\354\204\244\354\271\230\355\233\204\354\236\221\354\227\205\355\225\230\354\204\270\354\232\224.txt" +++ /dev/null @@ -1,3 +0,0 @@ -https://tailwindcss.com/docs/installation - -위 사이트의 가이드대로 설치 및 설정 후 작업하세요. \ No newline at end of file diff --git "a/\355\231\215\354\206\214\355\235\254/ex10.test.ts" "b/\355\231\215\354\206\214\355\235\254/ex10.test.ts" deleted file mode 100644 index 6218a79..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex10.test.ts" +++ /dev/null @@ -1,4 +0,0 @@ -import { ArrayList } from './ex10'; -console.log('🚀 ArrayList:', ArrayList); - -// 여기에 테스트코드를 작성하세요. diff --git "a/\355\231\215\354\206\214\355\235\254/ex10.ts" "b/\355\231\215\354\206\214\355\235\254/ex10.ts" deleted file mode 100644 index 1ffaef5..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex10.ts" +++ /dev/null @@ -1,71 +0,0 @@ -class Collection { - private readonly arr = Array(); - - constructor(...args: T[]) { - this.arr.push(...args); - } - - get _arr() { - return this.arr; - } - - push(...args: T[]) { - this.arr.push(...args); - return this.arr; - } - - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - - get poll(): T | undefined { - return this.isQueue() ? this.arr.shift() : this.arr.pop(); - } - - remove() { - return this.poll; - } - - get length() { - return this.arr.length; - } - - get isEmpty() { - return !this.arr.length; - } - - clear() { - this.arr.length = 0; - } - - iterator() { - return this[Symbol.iterator](); - } - - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } - - toArray() { - return this.isQueue() ? this.arr.toReversed() : this.arr; - } - - print() { - console.log(`<${this.constructor.name}: [${this.toArray()}]>`); - } - - private isQueue() { - return this instanceof Queue; - } -} - -class Stack extends Collection {} -class Queue extends Collection {} - -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} - -export { Stack, Queue, ArrayList }; diff --git "a/\355\231\215\354\206\214\355\235\254/ex2.js" "b/\355\231\215\354\206\214\355\235\254/ex2.js" deleted file mode 100644 index 6b95f04..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex2.js" +++ /dev/null @@ -1,4 +0,0 @@ -// range 함수를 작성하세요. -const range = (start, end, step = start > end ? -1 : 1) => { }; - -module.exports = { range }; diff --git "a/\355\231\215\354\206\214\355\235\254/ex2.test.js" "b/\355\231\215\354\206\214\355\235\254/ex2.test.js" deleted file mode 100644 index cbdb2e8..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex2.test.js" +++ /dev/null @@ -1,46 +0,0 @@ -const assert = require('assert'); -const { range } = require('./ex2'); - -assert.deepStrictEqual(range(1, 10, 1), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(1, 10, 2), [1, 3, 5, 7, 9]); -assert.deepStrictEqual(range(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); -assert.deepStrictEqual(range(10, 1), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); - -assert.deepStrictEqual(range(5, 5, 0), [5]); -assert.deepStrictEqual(range(1, 5, 0), [1]); -assert.deepStrictEqual(range(5, 5, -1), [5]); -assert.deepStrictEqual(range(5, 5), [5]); -assert.deepStrictEqual(range(0, 0, 5), [0]); -assert.deepStrictEqual(range(1, 5, -1), []); - -assert.deepStrictEqual(range(1, 5, 6), [1]); -assert.deepStrictEqual(range(0, 5), [0, 1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(-3, 0), [-3, -2, -1, 0]); - -assert.deepStrictEqual(range(5, 1, 1), []); -assert.deepStrictEqual(range(0, -1), [0, -1]); -assert.deepStrictEqual(range(0, -3), [0, -1, -2, -3]); -assert.deepStrictEqual(range(5, 1), [5, 4, 3, 2, 1]); -assert.deepStrictEqual(range(10, 1, -2), [10, 8, 6, 4, 2]); - -assert.deepStrictEqual(range(5), [1, 2, 3, 4, 5]); -assert.deepStrictEqual(range(0), [0]); -assert.deepStrictEqual(range(0, 0), [0]); -assert.deepStrictEqual(range(2, 1, -5), [2]); -assert.deepStrictEqual(range(0, -1, -5), [0]); -assert.deepStrictEqual(range(-5), [-5, -4, -3, -2, -1]); -assert.deepStrictEqual( - range(50), - Array.from({ length: 50 }, (_, i) => i + 1) -); -assert.deepStrictEqual( - range(1, 150, 3), - Array.from({ length: 50 }, (_, i) => i * 3 + 1) -); - -assert.deepStrictEqual( - range(1, 2, 0.1), - [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] -); - -console.log(range(1, 2, 0.1)); diff --git "a/\355\231\215\354\206\214\355\235\254/ex3.js" "b/\355\231\215\354\206\214\355\235\254/ex3.js" deleted file mode 100644 index b1b0d75..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex3.js" +++ /dev/null @@ -1,3 +0,0 @@ -Array.prototype.sortBy = function (sortProp = '') { - return this; -}; diff --git "a/\355\231\215\354\206\214\355\235\254/ex3.test.js" "b/\355\231\215\354\206\214\355\235\254/ex3.test.js" deleted file mode 100644 index 6c27a4d..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex3.test.js" +++ /dev/null @@ -1,18 +0,0 @@ -const assert = require('assert'); -require('./ex3'); - -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; -const kim = { id: 2, name: 'Kim', city: 'Seoul', dept: 2 }; -const lee = { id: 3, name: 'Lee', city: 'Daegu', dept: 2 }; -const users = [lee, hong, kim]; - -assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); -assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); -assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, - lee, - hong, -]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); diff --git "a/\355\231\215\354\206\214\355\235\254/ex4.js" "b/\355\231\215\354\206\214\355\235\254/ex4.js" deleted file mode 100644 index 9ede02f..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex4.js" +++ /dev/null @@ -1,3 +0,0 @@ -function deepCopy(obj) {} - -module.exports = { deepCopy }; diff --git "a/\355\231\215\354\206\214\355\235\254/ex4.test.js" "b/\355\231\215\354\206\214\355\235\254/ex4.test.js" deleted file mode 100644 index 2699ce8..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex4.test.js" +++ /dev/null @@ -1,40 +0,0 @@ -const assert = require('assert'); -const { deepCopy } = require('./ex4'); - -const arr = [1, 2, 3]; -const hong = { id: 1, name: 'Hong', city: 'Busan', dept: 1 }; - -const kim = { - nid: 3, - addr: 'Pusan', - arr: [1, 2, 3, { aid: 1 }, [10, 20]], - oo: { id: 1, name: 'Hong', addr: { city: 'Seoul' } }, - xx: null, - yy: function () { - console.log(this.oo); - }, - yyy() { - console.log(this.oo); - }, - [Symbol()]: 9, - [Symbol()]: Symbol('symbol2'), - zs: new Set([arr, hong]), - zws: new WeakSet([arr, hong]), - zm: new Map([[hong, arr]]), - zwm: new WeakMap([[hong, arr]]), -}; -const newKim = deepCopy(kim); -assert.deepStrictEqual(newKim, kim, 'deepCopy equal fail!'); -newKim.addr = 'Daegu'; -newKim.oo.name = 'Kim'; -assert.notDeepStrictEqual(newKim, kim, 'Not Valid Deep Copy!'); -newKim.arr[0] = 100; -newKim.arr[3].aid = 200; -newKim.arr[4][1] = 300; -newKim.oo.addr.city = 'Daejeon'; -assert.notStrictEqual(kim.arr[4][1], newKim.arr[4][1], 'pass2: 다르지 않아요!'); -assert.notStrictEqual( - kim.oo.addr.city, - newKim.oo.addr.city, - 'Not Pass3: city가 다르지 않아요!' -); diff --git "a/\355\231\215\354\206\214\355\235\254/ex5.js" "b/\355\231\215\354\206\214\355\235\254/ex5.js" deleted file mode 100644 index 464a05a..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex5.js" +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, -}; diff --git "a/\355\231\215\354\206\214\355\235\254/ex5.test.js" "b/\355\231\215\354\206\214\355\235\254/ex5.test.js" deleted file mode 100644 index 8d966e8..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex5.test.js" +++ /dev/null @@ -1,21 +0,0 @@ -const assert = require('assert'); -const { searchByKoreanInitialSound } = require('./ex5'); - -const s = ['강원도 고성군', '고성군 토성면', '토성면 북면', '북면', '김1수']; -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅇ'), [ - '강원도 고성군', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱㅅㄱ'), [ - '강원도 고성군', - '고성군 토성면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅌㅅㅁ'), [ - '고성군 토성면', - '토성면 북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅂㅁ'), [ - '토성면 북면', - '북면', -]); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㅍㅁ'), []); -assert.deepStrictEqual(searchByKoreanInitialSound(s, 'ㄱ1ㅅ'), ['김1수']); diff --git "a/\355\231\215\354\206\214\355\235\254/ex6.test.ts" "b/\355\231\215\354\206\214\355\235\254/ex6.test.ts" deleted file mode 100644 index 680c5e6..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex6.test.ts" +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import { promiseAllSettled, randTime } from './ex6'; - -(async function testNormal() { - assert.deepStrictEqual( - await promiseAllSettled([randTime(1), randTime(2), randTime(3)]), - await Promise.allSettled([randTime(1), randTime(2), randTime(3)]) - ); -})(); - -(async function testWithReject() { - assert.deepStrictEqual( - await promiseAllSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]), - await Promise.allSettled([ - randTime(11), - Promise.reject('REJECT'), - randTime(33), - ]) - ); -})(); diff --git "a/\355\231\215\354\206\214\355\235\254/ex6.ts" "b/\355\231\215\354\206\214\355\235\254/ex6.ts" deleted file mode 100644 index 424ca54..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex6.ts" +++ /dev/null @@ -1,4 +0,0 @@ -export const randTime = (val: T): Promise => - new Promise(resolve => setTimeout(resolve, Math.random() * 1000, val)); - -export function promiseAllSettled(promises: Promise[]) {} diff --git "a/\355\231\215\354\206\214\355\235\254/ex7.test.ts" "b/\355\231\215\354\206\214\355\235\254/ex7.test.ts" deleted file mode 100644 index 62b881d..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex7.test.ts" +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import { getPosts } from './ex7'; - -async function test(userId: string | number) { - const posts = await getPosts(userId); - - assert.strictEqual(posts?.length, 10); - assert.strictEqual(posts?.at(-1)?.comments?.length, 5); - assert.deepStrictEqual(posts[0], { - postId: 1, - title: - 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', - comments: [ - { - postId: 1, - id: 1, - email: 'Eliseo@gardner.biz', - body: - 'laudantium enim quasi est quidem magnam voluptate ipsam eos\n' + - 'tempora quo necessitatibus\n' + - 'dolor quam autem quasi\n' + - 'reiciendis et nam sapiente accusantium', - }, - { - postId: 1, - id: 2, - email: 'Jayne_Kuhic@sydney.com', - body: - 'est natus enim nihil est dolore omnis voluptatem numquam\n' + - 'et omnis occaecati quod ullam at\n' + - 'voluptatem error expedita pariatur\n' + - 'nihil sint nostrum voluptatem reiciendis et', - }, - { - postId: 1, - id: 3, - email: 'Nikita@garfield.biz', - body: - 'quia molestiae reprehenderit quasi aspernatur\n' + - 'aut expedita occaecati aliquam eveniet laudantium\n' + - 'omnis quibusdam delectus saepe quia accusamus maiores nam est\n' + - 'cum et ducimus et vero voluptates excepturi deleniti ratione', - }, - { - postId: 1, - id: 4, - email: 'Lew@alysha.tv', - body: - 'non et atque\n' + - 'occaecati deserunt quas accusantium unde odit nobis qui voluptatem\n' + - 'quia voluptas consequuntur itaque dolor\n' + - 'et qui rerum deleniti ut occaecati', - }, - { - postId: 1, - id: 5, - email: 'Hayden@althea.biz', - body: - 'harum non quasi et ratione\n' + - 'tempore iure ex voluptates in ratione\n' + - 'harum architecto fugit inventore cupiditate\n' + - 'voluptates magni quo et', - }, - ], - }); - - // 추가 테스트 코드를 작성하시오. -} - -test(1); diff --git "a/\355\231\215\354\206\214\355\235\254/ex7.ts" "b/\355\231\215\354\206\214\355\235\254/ex7.ts" deleted file mode 100644 index 62812ac..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex7.ts" +++ /dev/null @@ -1,3 +0,0 @@ -const POST_URL = 'https://jsonplaceholder.typicode.com/posts'; - -export async function getPosts(userId: number | string) {} diff --git "a/\355\231\215\354\206\214\355\235\254/ex8.ts" "b/\355\231\215\354\206\214\355\235\254/ex8.ts" deleted file mode 100644 index a67a2d2..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex8.ts" +++ /dev/null @@ -1,11 +0,0 @@ -// dummy(mock)입니다. 올바르게 수정하세요. -const debounce = (cb: any, delay: number) => (i: number) => {}; -const throttle = (cb: any, delay: number) => (i: number) => {}; - -// function throttle... - -const debo = debounce((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) debo(i); // 15 출력 - -const thro = throttle((a: number) => console.log(a + 1), 500); -for (let i = 10; i < 15; i++) thro(i); // 11 출력 diff --git "a/\355\231\215\354\206\214\355\235\254/ex9.js" "b/\355\231\215\354\206\214\355\235\254/ex9.js" deleted file mode 100644 index ec3044f..0000000 --- "a/\355\231\215\354\206\214\355\235\254/ex9.js" +++ /dev/null @@ -1,68 +0,0 @@ -const MENU = { - 짜장: { price: 7000 }, - 짬뽕: { price: 9900 }, - 탕슉: { price: 25000, taxfree: 1 }, -}; - -const LABEL_SIZE = 6; -const PRICE_SIZE = 7; - -function bill(tableNo) { - const ordered = []; - const tot = { price: 0, tax: 0 }; - - return { - order(item) { - ordered.push(item); - const { price, taxfree } = MENU[item]; - tot.price += price; - tot.tax += taxfree ? 0 : calcTax(price); - }, - - printBill() { - console.log(`\n\nTable. ${tableNo}`); - printLine(); - for (const item of ordered) { - const { price, taxfree } = MENU[item]; - console.log('*', item); - f`공급가액: ${price}원`; - f`부가세액: ${taxfree ? 0 : calcTax(price)}원`; - printLine('-'); - } - f`주문합계: ${tot.price}원`; - f`주문합계: ${tot.tax}원`; - printLine(); - }, - }; -} - -const table1 = bill(1); -table1.order('짜장'); -table1.order('짬뽕'); -table1.printBill(); - -const table2 = bill(2); -table2.order('짜장'); -table2.printBill(); - -table1.order('탕슉'); -table1.printBill(); - -table2.order('짬뽕'); -table2.printBill(); - -function f([label, unit], price) { - console.log(`${label.padEnd(LABEL_SIZE, ' ')} ${priceFmt(price)}`); -} - -function priceFmt(price, unit = '원') { - return price.toLocaleString().padStart(PRICE_SIZE, ' ') + unit; -} - -function printLine(flag = '=') { - console.log(flag.repeat(LABEL_SIZE * 2 + PRICE_SIZE + 2)); -} - -function calcTax(price) { - return Math.round((price / 1.1) * 0.1); -} From a661d8557d118c76efa01afe35f4e6b091763a68 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Wed, 11 Sep 2024 14:40:38 +0900 Subject: [PATCH 02/12] create ex3 --- postcss.config.js | 7 ++++ .../ex1/index.css" | 3 ++ .../ex1/index.html" | 13 ++++++ .../ex2.test.js" | 3 +- "\352\271\200\354\261\204\354\232\264/ex3.js" | 40 ++++++++++++++++++- .../ex3.test.js" | 6 +-- 6 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 postcss.config.js create mode 100644 "\352\271\200\354\261\204\354\232\264/ex1/index.css" diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..e876579 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: [ + require('tailwindcss'), + require('autoprefixer'), + ], + } + \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/index.css" "b/\352\271\200\354\261\204\354\232\264/ex1/index.css" new file mode 100644 index 0000000..bd6213e --- /dev/null +++ "b/\352\271\200\354\261\204\354\232\264/ex1/index.css" @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" index e69de29..c226e8d 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" @@ -0,0 +1,13 @@ + + + + + + + + +

+ Hello world! +

+ + \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex2.test.js" "b/\352\271\200\354\261\204\354\232\264/ex2.test.js" index 99f8264..5bc020e 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex2.test.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex2.test.js" @@ -43,5 +43,4 @@ assert.deepStrictEqual( [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2] ); -console.log(range(1, 2, 0.1)); -console.log(range(-5)) \ No newline at end of file +console.log(range(1, 2, 0.1)); \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex3.js" "b/\352\271\200\354\261\204\354\232\264/ex3.js" index b1b0d75..7729114 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex3.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex3.js" @@ -1,3 +1,41 @@ Array.prototype.sortBy = function (sortProp = '') { + const arr = []; + const props = sortProp.split(","); + + for(let p of props){ + arr.push(p.split(":")); + } + + for(let i = arr.length-1; i>=0; i--){ + if(arr[i].includes('name')){ + if(arr[i].includes('desc')){ + this.sort((a, b) => a.name > b.name ? -1 : 1); + }else{ + this.sort((a, b) => a.name < b.name ? -1 : 1); + } + } + else if(arr[i].includes('id')){ + if(arr[i].includes('desc')){ + this.sort((a, b) => a.id > b.id ? -1 : 1); + }else{ + this.sort((a, b) => a.id < b.id ? -1 : 1); + } + } + else if(arr[i].includes('city')){ + if(arr[i].includes('desc')){ + this.sort((a, b) => a.city > b.city ? -1 : 1); + }else{ + this.sort((a, b) => a.city < b.city ? -1 : 1); + } + } + else if(arr[i].includes('dept')){ + if(arr[i].includes('desc')){ + this.sort((a, b) => a.dept > b.dept ? -1 : 1); + }else{ + this.sort((a, b) => a.dept < b.dept ? -1 : 1); + } + } + } + return this; -}; +}; \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex3.test.js" "b/\352\271\200\354\261\204\354\232\264/ex3.test.js" index 6c27a4d..bc37804 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex3.test.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex3.test.js" @@ -8,11 +8,11 @@ const users = [lee, hong, kim]; assert.deepStrictEqual(users.sortBy('id'), [hong, kim, lee]); assert.deepStrictEqual(users.sortBy('name:desc'), [lee, kim, hong]); -assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [hong, lee, kim]); +assert.deepStrictEqual(users.sortBy('dept:desc,city:asc'), [lee, kim, hong]); assert.deepStrictEqual(users.sortBy('dept:desc,city:desc'), [kim, lee, hong]); assert.deepStrictEqual(users.sortBy('name:desc,id:,dept:desc'), [ - kim, lee, + kim, hong, ]); -assert.deepStrictEqual(users.sortBy('dept:desc,id'), [hong, kim, lee]); +assert.deepStrictEqual(users.sortBy('dept:desc,id'), [kim, lee, hong]); \ No newline at end of file From a5c99a541ca2389bec93f88bb9b2d7caa58da118 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Wed, 11 Sep 2024 20:47:10 +0900 Subject: [PATCH 03/12] create ex5 --- "\352\271\200\354\261\204\354\232\264/ex2.js" | 12 ++++---- "\352\271\200\354\261\204\354\232\264/ex4.js" | 4 ++- "\352\271\200\354\261\204\354\232\264/ex5.js" | 29 ++++++++++++++++++- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git "a/\352\271\200\354\261\204\354\232\264/ex2.js" "b/\352\271\200\354\261\204\354\232\264/ex2.js" index a3a379c..90016e1 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex2.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex2.js" @@ -23,17 +23,17 @@ const range = (start, end, step = start > end ? -1 : 1) => { ); // 정밀도를 가진 step, start, end를 위한 수치 - const factor = Math.pow(10, precision); - start = Math.round(start * factor); - end = Math.round(end * factor); - step = Math.round(step * factor); + const x = Math.pow(10, precision); + start = Math.round(start * x); + end = Math.round(end * x); + step = Math.round(step * x); // step이 양수일 때 if (step > 0) { if (start <= end) { for (let i = start; i <= end; i += step) { // 결과를 원하는 precision으로 반올림 - result.push(parseFloat((i / factor).toFixed(precision))); + result.push(parseFloat((i / x).toFixed(precision))); } } } @@ -42,7 +42,7 @@ const range = (start, end, step = start > end ? -1 : 1) => { if (start >= end) { for (let i = start; i >= end; i += step) { // 결과를 원하는 precision으로 반올림 - result.push(parseFloat((i / factor).toFixed(precision))); + result.push(parseFloat((i / x).toFixed(precision))); } } } diff --git "a/\352\271\200\354\261\204\354\232\264/ex4.js" "b/\352\271\200\354\261\204\354\232\264/ex4.js" index 9ede02f..05994f0 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex4.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex4.js" @@ -1,3 +1,5 @@ -function deepCopy(obj) {} +function deepCopy(obj) { + +} module.exports = { deepCopy }; diff --git "a/\352\271\200\354\261\204\354\232\264/ex5.js" "b/\352\271\200\354\261\204\354\232\264/ex5.js" index 464a05a..2dfcf48 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex5.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex5.js" @@ -1,3 +1,30 @@ module.exports = { - searchByKoreanInitialSound: (data, firstSounds) => {}, + searchByKoreanInitialSound: (data, firstSounds) => { + const dataRegex = new RegExp(data); + const korean = ['ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ']; + const 가 = '가'.charCodeAt(); //44032 + const first = Math.floor('까'.charCodeAt() - '가'.charCodeAt()); + const last = Math.floor('개'.charCodeAt() - '가'.charCodeAt()); + + const fs = firstSounds.split(""); + const regs = [] + + for(let i=0; i regex.test(item)) + }, }; + From f94517e34dd1e61513c4a4d64666abea9ada3ff4 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Wed, 11 Sep 2024 20:59:29 +0900 Subject: [PATCH 04/12] create ex4 --- "\352\271\200\354\261\204\354\232\264/ex4.js" | 65 ++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git "a/\352\271\200\354\261\204\354\232\264/ex4.js" "b/\352\271\200\354\261\204\354\232\264/ex4.js" index 05994f0..2ca33f1 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex4.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex4.js" @@ -1,5 +1,66 @@ function deepCopy(obj) { - + // 기본 데이터 타입은 그대로 반환 + if (obj === null || typeof obj !== 'object') { + return obj; + } + + // Date 객체는 직접 복사 + if (obj instanceof Date) { + return new Date(obj.getTime()); + } + + // RegExp 객체는 직접 복사 + if (obj instanceof RegExp) { + return new RegExp(obj); + } + + // Array 객체는 배열을 복사 + if (Array.isArray(obj)) { + return obj.map(item => deepCopy(item)); + } + + // Set 객체는 Set을 복사 + if (obj instanceof Set) { + const newSet = new Set(); + obj.forEach(value => { + newSet.add(deepCopy(value)); + }); + return newSet; + } + + // Map 객체는 Map을 복사 + if (obj instanceof Map) { + const newMap = new Map(); + obj.forEach((value, key) => { + newMap.set(deepCopy(key), deepCopy(value)); + }); + return newMap; + } + + // WeakSet 및 WeakMap은 복사할 수 없으므로, 빈 객체를 반환하거나 원본을 반환 + if (obj instanceof WeakSet || obj instanceof WeakMap) { + return obj; + } + + // 일반 객체는 객체의 모든 속성을 재귀적으로 복사 + const newObj = {}; + Object.keys(obj).forEach(key => { + newObj[key] = deepCopy(obj[key]); + }); + + // Symbol 속성 복사 + const symbols = Object.getOwnPropertySymbols(obj); + symbols.forEach(symbol => { + newObj[symbol] = deepCopy(obj[symbol]); + }); + + // 메서드(함수)도 복사 + const methodKeys = Object.getOwnPropertyNames(obj).filter(key => typeof obj[key] === 'function'); + methodKeys.forEach(key => { + newObj[key] = obj[key]; + }); + + return newObj; } -module.exports = { deepCopy }; +module.exports = { deepCopy }; \ No newline at end of file From cf1e58d78e3ac8dcd0e167df69db90c7fc754395 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Wed, 11 Sep 2024 23:36:04 +0900 Subject: [PATCH 05/12] create register page --- .../ex1/index.html" | 3 + .../ex1/register.html" | 117 ++++++++++++++++++ 2 files changed, 120 insertions(+) diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" index c226e8d..982f68c 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" @@ -1,13 +1,16 @@ + +

Hello world!

+ \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" index e69de29..340267b 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" @@ -0,0 +1,117 @@ + + + + + + + + + + + + +
+
image넣기
+
+ + | + +
+
+ + +
+
+

Sign Up

+
+ + + + + + + + +
+ +
+ + +
+ + +
+ footer +
+ + + \ No newline at end of file From 881a061093e082e4e8d289cfe00c6e5f7892ca25 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Thu, 12 Sep 2024 20:56:52 +0900 Subject: [PATCH 06/12] create ex6, ex8 --- .../ex1/book-edit.html" | 156 +++++++++++++ .../ex1/index.html" | 220 +++++++++++++++++- .../ex1/register.html" | 24 +- .../ex6.test.ts" | 8 +- "\352\271\200\354\261\204\354\232\264/ex6.ts" | 43 +++- "\352\271\200\354\261\204\354\232\264/ex8.ts" | 27 ++- "\352\271\200\354\261\204\354\232\264/ex9.js" | 22 +- .../test.ts" | 2 + 8 files changed, 460 insertions(+), 42 deletions(-) create mode 100644 "\352\271\200\354\261\204\354\232\264/test.ts" diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" index e69de29..417d569 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" @@ -0,0 +1,156 @@ + + + + + + + + + + + + +
+
image넣기
+
+ + | + +
+
+ + +
+
+
+ +
+
+ + +
+
+ + + +
+

There is no marks.

+
+ +
+ + +
+ © Hanaro 2024 +
+ + + \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" index 982f68c..68177dd 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" @@ -5,12 +5,224 @@ + - -

- Hello world! -

+ + +
+
image넣기
+
+ + +
+
+ + +
+
+
    +

    Bookmark

    +
  • + Bookmark Image +
    + Google + 구글에서 다양한 검색을... +
    +
    + +
    +
  • + +
  • + Bookmark Image + Google +
    + +
    +
  • + +
  • + Bookmark Image + Google +
    + +
    +
  • +
+ +
+ +
+
+ +
+
    +

    Study

    +
  • + Bookmark Image + Google +
    + +
    +
  • +
  • + Bookmark 1 + +
  • +
  • + Bookmark 1 + +
  • +
+ +
+ +
+
+
+ + +
+ © Hanaro 2024 +
\ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" index 340267b..a80d598 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" @@ -6,35 +6,26 @@ @@ -109,9 +118,15 @@
-
image넣기
+
- +
-
  • Bookmark Image - Google -
    +
    + Naver + 다양한 정보와 유용한 컨텐츠를 + 만나보세요... +
    +
  • -
  • Bookmark Image - Google -
    +
    + Youtube + 마음에 드는 동영상과 음악을 + 감상하고... +
    +
  • +
    @@ -188,10 +210,14 @@

    Bookmark

    Study
  • Bookmark Image - Google -
    +
    + JavaScript + Programming language of + the Web... +
    +
  • +
  • - Bookmark 1 - -
  • -
  • - Bookmark 1 - + Bookmark Image +
    + Tailwind CSS + Tailwind CSS is + a... +
    +
    + +
  • +
    @@ -223,6 +262,12 @@

    Study

    © Hanaro 2024
    + + \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" index a80d598..140b8a0 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" @@ -53,7 +53,7 @@ /* 세로 크기 */ max-height: 40px; /* 최대 세로 크기 */ - background-color: gray; + background-color: rgb(183, 183, 185); border-radius: 20px; /* 둥근 모서리 */ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); @@ -65,15 +65,23 @@ margin-top: 20px; margin-bottom: 20px; } + + .button-register:hover{ + cursor: pointer; + background-color: rgb(203, 202, 202); + }
    -
    image넣기
    +
    - + | @@ -94,7 +102,7 @@

    Sign Up

    - + @@ -104,6 +112,15 @@

    Sign Up

    © Hanaro 2024
    + + \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex10.test.ts" "b/\352\271\200\354\261\204\354\232\264/ex10.test.ts" index 7230b87..ce10cf6 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex10.test.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex10.test.ts" @@ -1,18 +1,18 @@ import { ArrayList } from './ex10'; console.log('🚀 ArrayList:', ArrayList); -const alist = new ArrayList([1, 2]); // alist.toString() ⇒ { value: 1, rest: { value: 2 } } -alist.add(3); // { value: 1, rest: { value: 2, rest: { value: 3 } } } -alist.add(5, 1); // { value: 1, rest: { value: 5, rest: { value: 2, rest: { value: 3 } }} -// alist.remove(2); // { value: 1, rest: { value: 5, rest: { value: 3 } } } -alist.add(22, 1); // { value: 1, rest: { value: 22, rest: { value: 5, rest: { value: 3 } } } } -alist.add(33, 1); -alist.toString(); // ArrayList(4) { value: 1, rest: { value: 33, rest: { value: 22, rest: { value: 5, rest: ...} } } } -alist.set(1, 300); // { value: 1, rest: { value: 300, rest: { value: 33, rest: { ... } } } } -alist.get(2); alist.size; // 22, 4 -alist.indexOf(300); // 1 -alist.contains(300); alist.contains(301); // true, false -alist.isEmpty; alist.peek; // false, 3 -alist.toArray(); // [1, 300, 22, 3] -alist.iterator().next(); // { value: 1, done: false } -alist.clear(); // all clear \ No newline at end of file +// const alist = new ArrayList([1, 2]); // alist.toString() ⇒ { value: 1, rest: { value: 2 } } +// alist.add(3); // { value: 1, rest: { value: 2, rest: { value: 3 } } } +// alist.add(5, 1); // { value: 1, rest: { value: 5, rest: { value: 2, rest: { value: 3 } }} +// // alist.remove(2); // { value: 1, rest: { value: 5, rest: { value: 3 } } } +// alist.add(22, 1); // { value: 1, rest: { value: 22, rest: { value: 5, rest: { value: 3 } } } } +// alist.add(33, 1); +// alist.toString(); // ArrayList(4) { value: 1, rest: { value: 33, rest: { value: 22, rest: { value: 5, rest: ...} } } } +// alist.set(1, 300); // { value: 1, rest: { value: 300, rest: { value: 33, rest: { ... } } } } +// alist.get(2); alist.size; // 22, 4 +// alist.indexOf(300); // 1 +// alist.contains(300); alist.contains(301); // true, false +// alist.isEmpty; alist.peek; // false, 3 +// alist.toArray(); // [1, 300, 22, 3] +// alist.iterator().next(); // { value: 1, done: false } +// alist.clear(); // all clear \ No newline at end of file diff --git "a/\352\271\200\354\261\204\354\232\264/ex10.ts" "b/\352\271\200\354\261\204\354\232\264/ex10.ts" index 0026e1c..1ffaef5 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex10.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex10.ts" @@ -1,5 +1,5 @@ class Collection { - protected arr: T[] = []; + private readonly arr = Array(); constructor(...args: T[]) { this.arr.push(...args); @@ -42,7 +42,7 @@ class Collection { return this[Symbol.iterator](); } - //[1, 2, 3] + // [1, 2, 3] *[Symbol.iterator]() { for (let i = this.length - 1; i >= 0; i -= 1) { yield this.toArray()[i]; @@ -50,7 +50,7 @@ class Collection { } toArray() { - return this.isQueue() ? this.arr.slice().reverse() : this.arr; + return this.isQueue() ? this.arr.toReversed() : this.arr; } print() { @@ -65,153 +65,7 @@ class Collection { class Stack extends Collection {} class Queue extends Collection {} -class ArrayList extends Collection { - // 링크드 리스트 노드 타입 정의 - private list: { value: T; rest?: { value: T; rest?: any } } | undefined; - - constructor(array: T[]) { - super(); - this.list = ArrayList.arrayToList(array); - } - - static listToArray(list: { value: T; rest?: { value: T; rest?: any } } | undefined): T[] { - const result: T[] = []; - let current = list; - - while (current) { - result.push(current.value); - current = current.rest; - } - - return result; - } - - static arrayToList(array: T[]): { value: T; rest?: { value: T; rest?: any } } | undefined { - if (array.length === 0) { - throw new Error("Array cannot be empty"); - } - - let list: { value: T; rest?: { value: T; rest?: any } } = { value: array[0] }; - let current = list; - - for (let i = 1; i < array.length; i++) { - current.rest = { value: array[i] }; - current = current.rest; - } - - return list; - } - - add(value: T, index: number = this.length) { - if (index < 0 || index > this.length) { - throw new Error("Index out of bounds"); - } - - if (index === this.length) { - this.push(value); - } else { - this.list = this._addAtIndex(this.list, value, index); - } - } - - private _addAtIndex(list: { value: T; rest?: { value: T; rest?: any } } | undefined, value: T, index: number): { value: T; rest?: { value: T; rest?: any } } | undefined { - if (index === 0) { - return { value, rest: list }; - } - - if (list) { - return { value: list.value, rest: this._addAtIndex(list.rest, value, index - 1) }; - } - - return undefined; - } - - remove(): T | undefined { - return this.poll; - } - - private _removeAtIndex(list: { value: T; rest?: { value: T; rest?: any } } | undefined, index: number): { value: T; rest?: { value: T; rest?: any } } | undefined { - if (index === 0 && list) { - return list.rest; - } - - if (list) { - return { value: list.value, rest: this._removeAtIndex(list.rest, index - 1) }; - } - - return undefined; - } - - set(index: number, value: T) { - if (index < 0 || index >= this.length) { - throw new Error("Index out of bounds"); - } - - this.list = this._setAtIndex(this.list, index, value); - } - - private _setAtIndex(list: { value: T; rest?: { value: T; rest?: any } } | undefined, index: number, value: T): { value: T; rest?: { value: T; rest?: any } } | undefined { - if (index === 0 && list) { - return { value, rest: list.rest }; - } - - if (list) { - return { value: list.value, rest: this._setAtIndex(list.rest, index - 1, value) }; - } - - return undefined; - } - - get(index: number): T | undefined { - if (index < 0 || index >= this.length) { - throw new Error("Index out of bounds"); - } - - return this._getAtIndex(this.list, index); - } - - private _getAtIndex(list: { value: T; rest?: { value: T; rest?: any } } | undefined, index: number): T | undefined { - if (index === 0 && list) { - return list.value; - } - - if (list) { - return this._getAtIndex(list.rest, index - 1); - } - - return undefined; - } - - indexOf(value: T): number { - let index = 0; - let current = this.list; - - while (current) { - if (current.value === value) { - return index; - } - current = current.rest; - index++; - } - - return -1; - } - - contains(value: T): boolean { - return this.indexOf(value) !== -1; - } - - toArray(): T[] { - return ArrayList.listToArray(this.list); - } - - get size() { - return this.length; - } - - toString(): string { - return `ArrayList(${this.length}) ${JSON.stringify(this.list)}`; - } -} +// ArrayList 클래스를 작성하세요. +class ArrayList extends Collection {} export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\354\261\204\354\232\264/ex7.test.ts" "b/\352\271\200\354\261\204\354\232\264/ex7.test.ts" index 62b881d..8be1d36 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex7.test.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex7.test.ts" @@ -65,6 +65,13 @@ async function test(userId: string | number) { }); // 추가 테스트 코드를 작성하시오. + // 빈 결과를 반환할 때의 테스트 + const noPosts = await getPosts(99999); // 존재하지 않는 userId + assert.deepStrictEqual(noPosts, []); + + // 다른 userId에 대한 테스트 + const otherUserPosts = await getPosts(3); // 다른 userId + assert.strictEqual(otherUserPosts.length, 10); // 예를 들어 10개의 게시글이 있어야 한다고 가정 } test(1); From eb008005d3c42a58e615d78dd8b54d7ac0744a02 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Fri, 13 Sep 2024 01:49:33 +0900 Subject: [PATCH 09/12] update ex1 - button event --- .../ex1/book-edit.html" | 12 +++++++++--- .../ex1/index.html" | 19 +++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" index 0df7935..4e4ce1a 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" @@ -80,10 +80,10 @@
    -
    +
    +
    @@ -123,7 +123,7 @@

    There is no marks.

    - @@ -137,6 +137,12 @@ document.getElementById('button-signup').addEventListener('click', function () { window.location.href = 'register.html' }) + document.getElementById('logo').addEventListener('click', function(){ + window.location.href = 'index.html' + }) + document.getElementById('button-add').addEventListener('click', function(){ + window.alert("북마크가 추가되었습니다."); + }); diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" index 9294309..22dc0d9 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" @@ -118,13 +118,13 @@
    - +
    @@ -251,7 +251,7 @@

    Study

    -
    @@ -265,8 +265,15 @@

    Study

    From 15343640479c8222cddfe9543916510d349e0a2b Mon Sep 17 00:00:00 2001 From: codnscodns Date: Fri, 13 Sep 2024 13:45:23 +0900 Subject: [PATCH 10/12] create ex10 --- .../ex1/book-edit.html" | 7 +- .../ex1/index.html" | 10 +- .../ex1/register.html" | 15 +- .../ex10.test.ts" | 37 ++-- .../ex10.ts" | 164 +++++++++++++++--- "\352\271\200\354\261\204\354\232\264/ex4.js" | 10 -- "\352\271\200\354\261\204\354\232\264/ex7.ts" | 6 +- 7 files changed, 182 insertions(+), 67 deletions(-) diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" index 4e4ce1a..b9636c4 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" @@ -42,7 +42,8 @@ margin-bottom: 10px; /* 입력 필드와 다음 레이블 사이의 간격 */ padding: 7px; - border: 1px solid gray; + /* border: 2px solid rgb(70, 69, 69); */ + background-color: rgb(231, 230, 230); border-radius: 5px; display: flex; flex-direction: column; @@ -62,7 +63,7 @@ .button-add:hover { cursor: pointer; - background-color: rgb(55, 55, 55); + background-color: rgb(77, 77, 77); } .button-first:hover { @@ -123,7 +124,7 @@

    There is no marks.

    - diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" index 22dc0d9..0390389 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" @@ -66,7 +66,7 @@ .button-add:hover { cursor: pointer; - background-color: rgb(55, 55, 55); + background-color: rgb(77, 77, 77); } .bookmark-list { @@ -77,7 +77,7 @@ .bookmark { width: 100%; height: 90px; - border: 1px solid gray !important; + border: 1px solid rgb(121, 70, 177); border-radius: 5px; margin: 10px 0; padding: 10px; @@ -100,7 +100,7 @@ .bookmark:hover{ cursor: pointer; - background-color: rgb(232, 231, 231); + background-color: rgb(241, 233, 248); } .button-profile img { @@ -198,7 +198,7 @@

    Bookmark

    -
    +
    @@ -250,7 +250,7 @@

    Study

    -
    +
    diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" index 140b8a0..b09c513 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" @@ -36,7 +36,7 @@ margin-bottom: 10px; /* 입력 필드와 다음 레이블 사이의 간격 */ padding: 7px; - border: 1px solid gray; + border: 1px solid rgb(167, 146, 182); border-radius: 5px; display: flex; flex-direction: column; @@ -53,7 +53,7 @@ /* 세로 크기 */ max-height: 40px; /* 최대 세로 크기 */ - background-color: rgb(183, 183, 185); + background-color: rgb(181, 181, 181); border-radius: 20px; /* 둥근 모서리 */ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); @@ -64,11 +64,12 @@ flex-direction: column; margin-top: 20px; margin-bottom: 20px; + font-weight: bold; } .button-register:hover{ cursor: pointer; - background-color: rgb(203, 202, 202); + background-color: #9198e5; } @@ -93,13 +94,13 @@

    Sign Up

    - + - + - + - +
    diff --git "a/\352\271\200\354\261\204\354\232\264/ex10.test.ts" "b/\352\271\200\354\261\204\354\232\264/ex10.test.ts" index ce10cf6..27b8308 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex10.test.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex10.test.ts" @@ -1,18 +1,25 @@ import { ArrayList } from './ex10'; console.log('🚀 ArrayList:', ArrayList); -// const alist = new ArrayList([1, 2]); // alist.toString() ⇒ { value: 1, rest: { value: 2 } } -// alist.add(3); // { value: 1, rest: { value: 2, rest: { value: 3 } } } -// alist.add(5, 1); // { value: 1, rest: { value: 5, rest: { value: 2, rest: { value: 3 } }} -// // alist.remove(2); // { value: 1, rest: { value: 5, rest: { value: 3 } } } -// alist.add(22, 1); // { value: 1, rest: { value: 22, rest: { value: 5, rest: { value: 3 } } } } -// alist.add(33, 1); -// alist.toString(); // ArrayList(4) { value: 1, rest: { value: 33, rest: { value: 22, rest: { value: 5, rest: ...} } } } -// alist.set(1, 300); // { value: 1, rest: { value: 300, rest: { value: 33, rest: { ... } } } } -// alist.get(2); alist.size; // 22, 4 -// alist.indexOf(300); // 1 -// alist.contains(300); alist.contains(301); // true, false -// alist.isEmpty; alist.peek; // false, 3 -// alist.toArray(); // [1, 300, 22, 3] -// alist.iterator().next(); // { value: 1, done: false } -// alist.clear(); // all clear \ No newline at end of file +const alist = new ArrayList([1, 2]); // alist.toString() ⇒ { value: 1, rest: { value: 2 } } +console.log(alist.listToArray(({ value: 1, rest: { value: 2 } }))); +console.log(alist.arrayToList([1,2])); +console.log(alist.add(3)); +console.log(alist.add(5, 1)); +console.log(alist.indexOf(3)); +console.log(alist.indexOf(900)); //존재하지 않는 값의 인덱스 검색시 -1 반환 +console.log(alist.remove(2)); +console.log(alist.add(22, 1)); +console.log(alist.add(33, 1)); +console.log(alist.toString()); +console.log(alist.set(1, 300)); +console.log(alist.get(2)); +console.log(alist.size()); +console.log(alist.contains(300)); +console.log(alist.contains(301)); +console.log(alist.isEmpty()); +console.log(alist.peek()); +console.log(alist.toArray()); +console.log(alist.iterator().next()); +console.log(alist.clear()); +console.log(alist.isEmpty()); //true , clear이후 비어있음. diff --git "a/\352\271\200\354\261\204\354\232\264/ex10.ts" "b/\352\271\200\354\261\204\354\232\264/ex10.ts" index 1ffaef5..dd7be20 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex10.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex10.ts" @@ -14,40 +14,28 @@ class Collection { return this.arr; } - get peek(): T | undefined { - return this.isQueue() ? this.arr[0] : this.arr.at(-1); - } - get poll(): T | undefined { return this.isQueue() ? this.arr.shift() : this.arr.pop(); } - remove() { - return this.poll; - } - get length() { return this.arr.length; } - get isEmpty() { - return !this.arr.length; - } - clear() { this.arr.length = 0; } - iterator() { - return this[Symbol.iterator](); - } + // iterator() { + // return this[Symbol.iterator](); + // } - // [1, 2, 3] - *[Symbol.iterator]() { - for (let i = this.length - 1; i >= 0; i -= 1) { - yield this.toArray()[i]; - } - } + // // [1, 2, 3] + // *[Symbol.iterator]() { + // for (let i = this.length - 1; i >= 0; i -= 1) { + // yield this.toArray()[i]; + // } + // } toArray() { return this.isQueue() ? this.arr.toReversed() : this.arr; @@ -65,7 +53,137 @@ class Collection { class Stack extends Collection {} class Queue extends Collection {} -// ArrayList 클래스를 작성하세요. -class ArrayList extends Collection {} +interface MyNode { + value: T; + rest?: MyNode; +} + +class ArrayList extends Collection { + constructor(arr: T[] = []) { + super(...arr); + } + + toString(): string { + const node = this.arrayToList(this._arr); + return this.nodeToString(node); + } + + private nodeToString(node?: MyNode): string { + if (!node) return ""; + + const { value, rest } = node; + return rest + ? `{ value: ${value}, rest: ${this.nodeToString(rest)} }` + : `{ value: ${value} }`; + } + + arrayToList(arr: T[]): MyNode | undefined { + if (arr.length === 0) return undefined; + + const [first, ...rest] = arr; + const node: MyNode = { value: first }; + const restNode = this.arrayToList(rest); + + if (restNode) { + node.rest = restNode; + } + + return node; + } + + listToArray(node: MyNode | undefined): T[] { + const result: T[] = []; + while (node) { + result.push(node.value); + node = node.rest; + } + return result; + } + + toArray(): T[] { + return [...this._arr]; + } + + add(value: T, index?: number): string { + if (index === undefined) { + this.push(value); // 인덱스가 지정되지 않은 경우, 배열의 끝에 추가 + } else { + this._arr.splice(index, 0, value); // 지정된 인덱스에 값 추가 + } + return this.toString(); // 추가 후 결과를 문자열로 반환 + } + + remove(value: T): string | undefined { + let idx = this.indexOf(value); + + if (idx === -1) { + //존재하지 않는 값을 삭제하려는 경우 + return "존재하지 않는 값입니다."; + } else { + this._arr.splice(idx, 1); + return this.toString(); + } + } + + indexOf(value: T): number { + let cnt = 0; + for (let v of this._arr.values()) { + if (v === value) return cnt; + cnt += 1; + } + return -1; //존재하지 않으면 -1반환 + } + + set(index: number, value: T): string { + this._arr[index] = value; + return this.toString(); + } + + get(index: number): T | undefined { + if (index < 0 || index >= this.length) { + return undefined; + } + return this._arr[index]; + } + + size(): number { + return this.length; + } + + contains(value: T): boolean { + return this._arr.includes(value) === true; + } + + isEmpty(): boolean { + if (this.length === 0) { + return true; + } else { + return false; + } + } + + peek(): T { + return this._arr[-1]; + } + + iterator() { + let index = 0; + const arr = this.toArray(); + return { + next: () => { + if (index < arr.length) { + return { value: arr[index++], done: false }; + } else { + return { value: undefined, done: true }; + } + }, + }; + } + + clear(): string { + this._arr.length = 0; + return "all clear"; + } +} export { Stack, Queue, ArrayList }; diff --git "a/\352\271\200\354\261\204\354\232\264/ex4.js" "b/\352\271\200\354\261\204\354\232\264/ex4.js" index 2ca33f1..16f0ae0 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex4.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex4.js" @@ -1,25 +1,20 @@ function deepCopy(obj) { - // 기본 데이터 타입은 그대로 반환 if (obj === null || typeof obj !== 'object') { return obj; } - // Date 객체는 직접 복사 if (obj instanceof Date) { return new Date(obj.getTime()); } - // RegExp 객체는 직접 복사 if (obj instanceof RegExp) { return new RegExp(obj); } - // Array 객체는 배열을 복사 if (Array.isArray(obj)) { return obj.map(item => deepCopy(item)); } - // Set 객체는 Set을 복사 if (obj instanceof Set) { const newSet = new Set(); obj.forEach(value => { @@ -28,7 +23,6 @@ function deepCopy(obj) { return newSet; } - // Map 객체는 Map을 복사 if (obj instanceof Map) { const newMap = new Map(); obj.forEach((value, key) => { @@ -37,24 +31,20 @@ function deepCopy(obj) { return newMap; } - // WeakSet 및 WeakMap은 복사할 수 없으므로, 빈 객체를 반환하거나 원본을 반환 if (obj instanceof WeakSet || obj instanceof WeakMap) { return obj; } - // 일반 객체는 객체의 모든 속성을 재귀적으로 복사 const newObj = {}; Object.keys(obj).forEach(key => { newObj[key] = deepCopy(obj[key]); }); - // Symbol 속성 복사 const symbols = Object.getOwnPropertySymbols(obj); symbols.forEach(symbol => { newObj[symbol] = deepCopy(obj[symbol]); }); - // 메서드(함수)도 복사 const methodKeys = Object.getOwnPropertyNames(obj).filter(key => typeof obj[key] === 'function'); methodKeys.forEach(key => { newObj[key] = obj[key]; diff --git "a/\352\271\200\354\261\204\354\232\264/ex7.ts" "b/\352\271\200\354\261\204\354\232\264/ex7.ts" index 3c607cc..07c1f10 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex7.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex7.ts" @@ -20,18 +20,16 @@ async function fetchJson(url: string): Promise { if (!response.ok) { throw new Error(`Failed to fetch: ${response.statusText}`); } - // Explicitly cast to type T to ensure type safety return response.json() as Promise; } export async function getPosts(userId: number | string): Promise { - // 게시글 목록을 가져옵니다. + //게시글 목록 받아오기 const posts = await fetchJson<{ userId: number; id: number; title: string }[]>(`${POST_URL}?userId=${userId}`); - // 각 게시글에 대한 댓글을 가져옵니다. const postsWithComments = await Promise.all( posts.map(async (post) => { - // 댓글 URL을 올바르게 설정하여 각 게시글의 댓글을 가져옵니다. + // 댓글url const comments = await fetchJson(`${COMMENTS_URL}?postId=${post.id}`); return { postId: post.id, From 18df20c849e96f5912ea0f982b9fb56f2aec8b31 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Fri, 13 Sep 2024 14:21:28 +0900 Subject: [PATCH 11/12] modify annotation --- .../ex1/register.html" | 11 ++--------- "\352\271\200\354\261\204\354\232\264/ex10.ts" | 11 ----------- "\352\271\200\354\261\204\354\232\264/ex2.js" | 2 +- "\352\271\200\354\261\204\354\232\264/ex4.js" | 4 ++-- "\352\271\200\354\261\204\354\232\264/ex6.ts" | 4 ++-- "\352\271\200\354\261\204\354\232\264/ex7.test.ts" | 2 +- 6 files changed, 8 insertions(+), 26 deletions(-) diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" index b09c513..18fbab4 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" @@ -34,30 +34,23 @@ .input-group input { margin-bottom: 10px; - /* 입력 필드와 다음 레이블 사이의 간격 */ padding: 7px; border: 1px solid rgb(167, 146, 182); border-radius: 5px; display: flex; flex-direction: column; align-items: center; - /* 입력 필드 둥글게 */ + box-shadow: 5px 5px 5px -5px rgba(0, 0, 0, 0.3); } .button-register { width: 60%; - /* 가로 크기 */ max-width: 150px; - /* 최대 가로 크기 */ height: 90%; - /* 세로 크기 */ max-height: 40px; - /* 최대 세로 크기 */ background-color: rgb(181, 181, 181); border-radius: 20px; - /* 둥근 모서리 */ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); - /* 그림자 효과 */ display: flex; align-items: center; justify-content: center; @@ -92,7 +85,7 @@
    -

    Sign Up

    +

    🔮Sign Up🌠

    diff --git "a/\352\271\200\354\261\204\354\232\264/ex10.ts" "b/\352\271\200\354\261\204\354\232\264/ex10.ts" index dd7be20..e750596 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex10.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex10.ts" @@ -26,17 +26,6 @@ class Collection { this.arr.length = 0; } - // iterator() { - // return this[Symbol.iterator](); - // } - - // // [1, 2, 3] - // *[Symbol.iterator]() { - // for (let i = this.length - 1; i >= 0; i -= 1) { - // yield this.toArray()[i]; - // } - // } - toArray() { return this.isQueue() ? this.arr.toReversed() : this.arr; } diff --git "a/\352\271\200\354\261\204\354\232\264/ex2.js" "b/\352\271\200\354\261\204\354\232\264/ex2.js" index 90016e1..5b60f89 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex2.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex2.js" @@ -8,7 +8,7 @@ const range = (start, end, step = start > end ? -1 : 1) => { start = start < 0 ? start : 1; // 음수일 경우 그대로 사용하고, 양수일 경우 1부터 시작 } - // step이 0인 경우: 무한 루프 방지 위해 [start]만 반환 + // step이 0인 경우, [start]만 반환 if (step === 0) { return [start]; } diff --git "a/\352\271\200\354\261\204\354\232\264/ex4.js" "b/\352\271\200\354\261\204\354\232\264/ex4.js" index 16f0ae0..6613949 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex4.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex4.js" @@ -45,8 +45,8 @@ function deepCopy(obj) { newObj[symbol] = deepCopy(obj[symbol]); }); - const methodKeys = Object.getOwnPropertyNames(obj).filter(key => typeof obj[key] === 'function'); - methodKeys.forEach(key => { + const methods = Object.getOwnPropertyNames(obj).filter(key => typeof obj[key] === 'function'); + methods.forEach(key => { newObj[key] = obj[key]; }); diff --git "a/\352\271\200\354\261\204\354\232\264/ex6.ts" "b/\352\271\200\354\261\204\354\232\264/ex6.ts" index f11c34b..24ee373 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex6.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex6.ts" @@ -29,7 +29,7 @@ export function promiseAll(promises: Promise[]): Promise { } export function promiseAllSettled(promises: Promise[]): Promise> { - // 프로미스들을 처리하여 성공 및 실패 상태를 반환하는 프로미스 배열을 생성합니다. + //성공 or 실패 상태를 반환하는 프로미스 배열 생성 const wrappedPromises = promises.map(promise => promise .then( @@ -38,6 +38,6 @@ export function promiseAllSettled(promises: Promise[]): Promise>; } diff --git "a/\352\271\200\354\261\204\354\232\264/ex7.test.ts" "b/\352\271\200\354\261\204\354\232\264/ex7.test.ts" index 8be1d36..d0bc5f2 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex7.test.ts" +++ "b/\352\271\200\354\261\204\354\232\264/ex7.test.ts" @@ -71,7 +71,7 @@ async function test(userId: string | number) { // 다른 userId에 대한 테스트 const otherUserPosts = await getPosts(3); // 다른 userId - assert.strictEqual(otherUserPosts.length, 10); // 예를 들어 10개의 게시글이 있어야 한다고 가정 + assert.strictEqual(otherUserPosts.length, 10); } test(1); From a402f2ce7fee05a21044597336a8967afabc3996 Mon Sep 17 00:00:00 2001 From: codnscodns Date: Fri, 13 Sep 2024 15:14:51 +0900 Subject: [PATCH 12/12] update button hover --- .../ex1/book-edit.html" | 11 ++++++- .../ex1/index.html" | 30 +++++++++++-------- .../ex1/register.html" | 11 ++++++- "\352\271\200\354\261\204\354\232\264/ex2.js" | 6 +--- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" index b9636c4..e1e687f 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/book-edit.html" @@ -75,6 +75,15 @@ cursor: pointer; background-color: rgb(224, 222, 222); } + + .div-button button:hover{ + cursor: pointer; + background-color: #edeef093; + } + .div-button button{ + padding:5px; + border-radius: 10px; + } @@ -85,7 +94,7 @@
    BookMark
    -
    +
    | diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" index 0390389..0ccb9d0 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/index.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/index.html" @@ -14,9 +14,7 @@ flex-direction: row; justify-content: center; align-items: center; - /* 세로 중앙 정렬 */ width: 100%; - /* 전체 폭 사용 */ } footer { @@ -26,7 +24,6 @@ .bookmark-container { width: 45%; - /* 두 컨테이너가 차지할 전체 폭 조절 */ max-width: 400px; height: 90%; border-radius: 15px; @@ -38,7 +35,6 @@ justify-content: start; flex-direction: column; margin: 0 10px; - /* 중앙 정렬을 위해 양쪽에 간격 */ } .input-group { @@ -98,11 +94,21 @@ margin-right: 5px; } - .bookmark:hover{ + .bookmark:hover { cursor: pointer; background-color: rgb(241, 233, 248); } + .div-button:hover { + cursor: pointer; + background-color: #edeef093; + } + + .div-button{ + padding: 5px; + border-radius: 10px; + } + .button-profile img { margin-right: 2px; width: 50px; @@ -126,7 +132,7 @@
    BookMark
    - +
    @@ -267,12 +273,12 @@

    Study

    document.getElementById('logo').addEventListener('click', function () { window.location.href = 'index.html' }); - document.getElementById('button-add1').addEventListener('click', function(){ - window.location.href = 'book-edit.html' + document.getElementById('button-add1').addEventListener('click', function () { + window.location.href = 'book-edit.html' + }); + document.getElementById('button-add2').addEventListener('click', function () { + window.location.href = 'book-edit.html' }); - document.getElementById('button-add2').addEventListener('click', function(){ - window.location.href = 'book-edit.html' - }); diff --git "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" index 18fbab4..a54d633 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex1/register.html" +++ "b/\352\271\200\354\261\204\354\232\264/ex1/register.html" @@ -43,6 +43,15 @@ box-shadow: 5px 5px 5px -5px rgba(0, 0, 0, 0.3); } + .div-button button:hover{ + cursor: pointer; + background-color: #edeef093; + } + .div-button button{ + padding:5px; + border-radius: 10px; + } + .button-register { width: 60%; max-width: 150px; @@ -74,7 +83,7 @@
    BookMark
    -
    +
    | diff --git "a/\352\271\200\354\261\204\354\232\264/ex2.js" "b/\352\271\200\354\261\204\354\232\264/ex2.js" index 5b60f89..3d2583f 100644 --- "a/\352\271\200\354\261\204\354\232\264/ex2.js" +++ "b/\352\271\200\354\261\204\354\232\264/ex2.js" @@ -8,21 +8,19 @@ const range = (start, end, step = start > end ? -1 : 1) => { start = start < 0 ? start : 1; // 음수일 경우 그대로 사용하고, 양수일 경우 1부터 시작 } - // step이 0인 경우, [start]만 반환 if (step === 0) { return [start]; } const result = []; - // 소수점 처리를 위한 precision 설정 + // 소수점 처리 const precision = Math.max( (step.toString().split('.')[1] || '').length, (start.toString().split('.')[1] || '').length, (end.toString().split('.')[1] || '').length ); - // 정밀도를 가진 step, start, end를 위한 수치 const x = Math.pow(10, precision); start = Math.round(start * x); end = Math.round(end * x); @@ -32,7 +30,6 @@ const range = (start, end, step = start > end ? -1 : 1) => { if (step > 0) { if (start <= end) { for (let i = start; i <= end; i += step) { - // 결과를 원하는 precision으로 반올림 result.push(parseFloat((i / x).toFixed(precision))); } } @@ -41,7 +38,6 @@ const range = (start, end, step = start > end ? -1 : 1) => { else { if (start >= end) { for (let i = start; i >= end; i += step) { - // 결과를 원하는 precision으로 반올림 result.push(parseFloat((i / x).toFixed(precision))); } }