본문 바로가기
기록/멋쟁이사자처럼 FE 스쿨

[멋사 FE 스쿨] 21일차 리뷰

by ahj 2021. 11. 29.

멋쟁이사자처럼 프론트엔드스쿨 w/ 제주코딩베이스캠프 21일차

오전(09:00~11:50) 수업 w/ Licat

morning break

  • 책을 집필해봐라
    5~6명 정도 모여서
  • 스타트업 관련하여
    → 큰 돈을 벌고 싶으면 사실 스타트업은 추천하기 어렵다.
  • 이력서 검토 요청이 많은데, 이력서를 빨리 보내달라.
    깃헙 README.md가 작성이 안되어있는 경우가 많은데, 다 적혀 있어야한다. 단순히 적혀 있는 것이 아니라 샘플 적혀잇는거
  • 여러 이력서를 보다보니 면밀, 냉정하게 판단해줄 수 있을 것.
    적어도 이렇게는 적을 것https://github.com/paullabkorea/resume-repo
  • 그냥 학교 프로젝트 한거가 서비스 배포도 안해보고. 그런거를 Pin 해서만큼 자랑할만한 것인지 잘 모르겠다.
  • 스타트업에서 더 필요한 것?
    아이디어 vs 기술
    → 크기전에는 아이디어, 크고나서는 기술
    둘 다 중요하지 않다고 생각, 열정이 중요
    아이디어는 pivot, 기술은 사람으로 해결가능.
    빨리 할 수 잇는 것들을 채우고 나머지는 사람으로 사람을 뽑고 문제의식에 대한 사명감이 있는지. 돈을 벌기 위해서 왔다는 동기는 금방 무너진다. 사실 스타트업은 월급을 밀리기가 솔직히 쉽다.
  • FE재남님 비전공, 33이라는 나이에 시작.. https://youtu.be/3ZP3VPlrr0U?list=PLjQV3hketAJnP_ceUiPCc8GnNQ0REpCqr
    SI부터 시작.. ㅎㅎ 대부분 낮은 레벨부터 시작한다. 그렇게 성공한 사람들이 많다. 처음 연봉을 너무 높게 잡으면 취업이 늦어지는데, 그것보다는 돈받으면서 공부한다는 생각으로 일하자.
  • 너무 나이에 구애 받지 말자!!
  • JS언어 자체가 너무 개판이라.. 번역도 개판일 수 밖에 없다. 초기 JS는 오류 투성이...
    문제점을 마주했을 때 문제점을 알아가는 것은 많은 리소스가 든다.
  • 명료한 언어들을 좋아하신다..ㅎ 파이썬은 사랑, C 계열 선호
  • JS 좋은 책은 코뿔소 http://www.yes24.com/Product/Goods/24769929
    이런 책을 한번쯤은 정복해야 한다.
  • 쉬운 책, 쉬운 책 자꾸 가다보면 내 실력도 쉽게 된다.
  • 앙상한 나무를 그리고, 간결하게만 배우고, 나중에 가지를 그리고, 잎을 그릴 것이다. 깊게 나뭇잎까지 한번 들어간다면, 나뭇잎 하나 그릴때 나무의 큰 그림에서 어디에 위치해있는지를 잊게 되는데, 전체 줄기를 한번 잡고 가지치기를 해나가기를 권장. 그렇기에 30분 요약강좌 같이 개괄적으로 한번 볼 것을 추천. 나뭇가지부터 먼저 잡자.
  • 백문이 불여일타다닥. 온라인 2배속이 아닌 실시간의 장점?
  1. 실시간 질의 응답
  2. 직접 따라쳐보는 시간

수업

  • 출력방법 4가지
  1. window.alert
  2. console.log
  3. document.write
  4. document.getElementById('one').innerHTML = 'hi'
  • https://ko.javascript.info/
  • document는 문서, document, window의 정체를 정확히 알고 싶을 때는 console.dir(document), console.dir(window)를 통해서 확인 가능하다.
  • console이란? → window dir 쳤을 때, console은 attribute 하단에 있다.
  • 윈도우에 접근하는 방법(멤버접근 연산자 dot(.))?
    ex) window.console.log → function임을 알려주고 있다.
  • console에 보면 가장 많이 사용하는 게 → error
    console.error()이렇게 접근
  • console.table도 많이 쓴다. → json 자료형 등을 깔끔한 table로 반환해준다.
  • 수업시간에 변수는 let으로만 사용하자.
  • error가 있다면 console.log만 쳐도 error가 뜨는데 console.error를 언제 쓰는지?
    → node로 실행하다가 error를 사용할 경우가 생긴다. 코드에 문제는 없지만 우리가 짠 logic 상에 문제가 있을 때 error를 반환하도록 사용해야한다.
  • json 자료형을 간단히 만들 수 있는 사이트
    https://www.json-generator.com/
  • 변수 하나에 대해서만 하루 온종일 얘기할 수 있다.
    변수란 무엇일까? → 태생부터 들어가야한다. 메모리 주소의 식별자이다. 변수명 자체가 인간이 식별할 수 있게끔 포스트잇을 붙여놓은 것.
  • let 나변수 = 10을 적어줬을 때 어떤일이 발생하는가?
    → 나변수라는 애가 메모리 주소(00AAFFDD와 같은)에 저장이 되어있음. 10이라는 애도(00AAFFDA와 같은) 저장이 되어 있다.
  • 공간을 차지하지 않는 다른 데이터란 있을 수가 없다.
  • 파이썬으로 치면 x=10, y=10 → id(x), id(y)는 같은 공간을 가리킨다.
    a=x를 해줘도 같은 공간을 가리킨다. → 이게 JS랑 Python 특징
    256까지는 메모리 주소에 적재되어 있다. 257이상은 a=257, b=257 이렇게 선언해줘도 다른 주소를 반환

갑자기 메모리 얘기

  • 갈매기털빼(KB,MB,GB,TB,PB) → 이런 단위 중요. 나중에 node 갔을 때 컴퓨터가 뻗어버릴 수도 있다.
  • 메모리란 무엇일까?
  • CPU는 두뇌 → 코어는 두뇌 하나. 코어가 많다고 해도, 그 안에 처리 속도를 아는 것이 중요하다. i3, i5 이런게 중요한게 아니라 세대가 중요. 결국 벤치마킹 점수가 중요
  • 하드디스크란? → 보조기억장치
  • 메모리는 DDR3, DDR4에 따라 달라짐 16GB이상 살필요 없는 듯
  • 하드디스크는 레이저로 새기는 것
  • CPU - RAM - SSD 순서로 되어 있기 때문에 CPU는 RAM에서 정보를 가져온다. SSD에서 바로 가져오는 경우도 있지만
  • 진수 정리
    → 진수는 왜 알아야 할까?? 코테에 나와서 ㅎhttps://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
  • 코테는 필수가 아니다! 사실 지금 코테는 어렵다.
  • 이진수 표현법 0b100 = 4

다시 변수

  • array는 왜 Object type인가.. function도
  • 사실 이시대에 function을 object라고 보면 안되는데.. JS는 일관되지가 않는다. 문제가 크다🤦‍♂️
    function인데 왜 변수가 담기냐 이거임..
  • k.a와 k['a']는 같다.
  • 부동소수점 조심해야한다..! 0.1*0.1 같은..
  • 부동소수점은 왜 일어나는가?
    → 0.01100110011001100110이런식으로 2진법으로 소수를 나타내다보면 발생할 수 밖에 없다.
  • 제코베 JS 코테스터디
    https://www.youtube.com/watch?v=WOwybsMpzRc
  • 정말 큰 수의 경우에 999999999999999999n + 3n이렇게 적어줘야한다.
    실제 서비스에서 언제 필요할까?
    생각보다 세상은 아름답지 못하다.ㅎ 허점을 파고드는 사람들이 있다.
    상품페이지가격에 엄청난 가격을 적어둔다.
  • 음수를 허락하지 않는 경우에는 0 -1은 9999999999999999다. 이거를 이용해서 해킹해가기도 한다.
  • 실제로 신한 근무 당시 해킹시도만 하루 10만건. 협박편지 받고. 협박편지에 걸맞은 증명을 해야 신경을 쓴다.
  • parseInt도 잘 알아야한다.
  • toFixed를 이용해서 소수점 수정해주기
let n = 10000
n.toFixed(4) // '10000.0000'
n.toFixed(5) // '10000.00000'
( 0.1 * 3 ).toFixed(2) // '0.30'

 

연산 - 산술, 할당, 비교, 논리 순서로 후에 실무에서 사용하는 연산

산술 연산

  • ;가 있어도 없어도 작동하지만 신입사원 때는 ;를 빼면 안좋게 보일.. 수도^^
  • a++비추 ++a로 써주자

할당연산

  • a = 11, b = 3;
    a = a + b → a는 14
    사실 연산자 우선순위 계산을 해야한다. =은 뭐길래 +보다
    =은 대입
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
    이런 우선순위 알면 좋지. 근데 사실 괄호치면 된다.
    하지만 실무에서 우선순위를 혼자 알고 막 적어놓은 코드는 다른 사람을 배려하지 못하는 코드가 될 수도 있다.
    급하게 짜야하는 코드에서 해독할 수 없다는 좌절감을 주게 되면 좋을 게 없다.
    모두에게 올바른 방향이 올바른 방향이 아닐 수 있다.
    유지보수 측면에서도 복잡한것보다 보고 이해하기 쉬운게 더 좋다.

비교연산
a == b(값 비교)
a === b(값 유형 비교)
a > b
a ≥ b
a < b
a ≤ b
a ≠ b

  • == 보다 ===가 빠르다 → 형변환이 일어나지 않기 때문에
    그렇지만 사실 형변환을 다 고려해가면서 짜지 않는다.
  • 반복문에서의 속도 격차가 매우 크다.
  • 시간복잡도 계산을 하게 되면, 시간 차이가 굉장히 크지, 등호 갯수 차이에 기인하는 시간 차이는 그렇게 크지 않다.

논리연산

// and, or, not
// &&(and) = 논리곱
// ||(or) = 논리합
// !(not) = 부정
// true = 1
// false = 0


오후(13:00~18:00) 수업 w/ Licat

막간 break

  • JS가 어려워서 패스할꺼다? HTML, CSS를 엄청 잘하면 모르겠는데 정복이라는 표현을 어렵고, 뭔가는 할 줄 안다. 뭔가를 만들어봤고 만들줄 안다 정도는 해야한다.
    코테를 포기할 수는 있어도, JS를 포기한다는 것은 말이 안된다.
  • 웹의 4대 요소?
    HTML, CSS, JS, WA(Web Assembly)
  • 막간 QnA → JS에서는 메모리 주소를 확인할 수 있는 놈이 없다.
    https://stackoverflow.com/questions/50530936/is-there-any-method-to-check-memory-address-of-javascript-variable
    대표님 아시는 내용 중에는 없다.
  • Object.is(0, -0) → false 반환
  1. false || true : true
  2. true && false : false
  3. !true : false
  4. !((true && false) || (true && false)) : true
  5. let x = 10
    !((x % 5 == 0 && x % 2 == 0) || (x / 2 == 5 && false)) : false
  6. let y = 10
    (false && y % 2 == 0) && (y / 2 == 5 && false) : false
  7. let z = 3
    (true && z % 3 == 0) || (z / 2 !=!= 5 && false) // : 이렇게 적으면 error true

// 드모르간 법칙
!(x || y) === (!x && !y)
!(x && y) === (!x || !y)

// 3항연산자 대체 용법
true && '완료' || '미완료';

  • JS는 논리 연산자 뒤에 잘못된 문법이 들어가면 오류 발생. 즉, 뒤에까지 다 살펴봐준다.
  • false || console.log('hello') → hello 반환
  • true || console.log('hello') → true 반환
  • 파이썬은 앞에가 true면 뒤에 것은 보지도 않는다.
  • 드모르간 법칙과 같은 방법으로 코드를 최적화하는 상황이 발생할 것
  • !x && !y와 같은 경우 !x가 false면 그냥 !x로만 적어줘도 된다.
  • 삼항(tenary) 연산자 a.k.a 조건부 연산자
    // 3항연산자 대체 용법
    true && '완료' || '미완료';
    사실 실무에서는 이렇게 사용하면 if문으로 고치라고 할 것. 가독성이 좋지 않으니깐 너무 단순한 if인 경우는 쓸 수 있어도
  • 주석이 없어도 읽힐 수 있는 코드를 지향하자! 실무에서는 주석을 세밀하게 쓰지 않는다. 세밀하게 쓸 동안 한 페이지를 만들고 있는다.
  • 클린코드 → 변수명 btnChangeBackgroundColor .이렇게 가독성을 높이슨 코드를 지향한다.
  • Python은 syntaxError를 잡고 뒤
  • Boolean([])는 왜 true인가..ㅠㅠ

회사에서 자주 사용하는 형변환

  • 회사에서 자주 사용하는 형변환은 회사 컨벤션 따라가야한다.
  • .toString, String()은 보통 사용하지 않는다.
  • 보통 123 + '' 이런 식으로 작성한다.
  • !!true도 매우 자주 사용한다.
  • 값이 없으면 ( = '') false
123 + '' // '123'
!!true // true
!!'hojun' // true
!!'' // false
!!1 // true
!!0 // false
!!undefined // false
!!NaN // false

→ 매우 강력하게 사용할 수 있다.

  • x를 string으로 바꾸려면 x + ''
    x를 boolean으로 바꾸려면 !!x
'0' == 0 // true
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == null // false
false == undefined // false
false == NaN // false
!!null // false
!!undefined // false
!!NaN // false

String은 + 에서만 String으로 형변환난다.

let x = '10000'

→ +x를 해주면 10000이 나온다(!) [숫자로 쉽게 형변환]

'11' - 'sdaf' // NaN

x * 1 도 number를 반환

parseInt(string, 진수)를 사용하는 것이 안전

99999999999999999999+3 // 100000000000000000000
99999999999999999999n+3n // 100000000000000000002n -> bigInt
parseInt(10, 10) // 10
parseInt(10, 2) // 2
parseInt(10, 8) // 8
parseInt(10, 16) // 16
let n = 10000
n.toFixed(4) // '10000.0000'
n.toFixed(5) // '10000.00000'
(0.1 * 3).toFixed(2) // '0.30'
Math.random() // 0.5687532051283051
Math.random() // 0.47986279267925624
let a = 10;
let b = 3;
console.log(a + b);
console.log(a - b);
console.log(a / b);
console.log(a * b);
console.log(a ** b);
console.log(a % b);
'''
VM4248:1 13
VM4248:2 7
VM4248:3 3.3333333333333335
VM4248:4 30
VM4248:5 1000
VM4248:6 1
'''
console.log(9 % 9); // VM4275:1 0
console.log(9 % 10); // VM4295:1 9

++a // 11
++a // 12
a++ // 12 -> 출력하고 13
a // 13
--a // 12
a-- // 12
a // 11

// 할당연산
a = a + b // 14
a += b // a = a + b 17
a /= b // a = a / b 5.666666666666667
a == b
a === b
a > b
a >= b
a < b
a <= b
a != b
true
a = 10
10
b = '10'
'10'
a == b
true
a === b
false
typeof a
'number'
typeof b
'string'
String(a)
'10'
String(a) === b
true
a
10
a = String(a)
'10'
a
'10'
// 논리연산
// and, or, not
// &&(and) = 논리곱
// ||(or) = 논리합
// !(not) = 부정
// true = 1
// false = 0

for (let x = 0; x < 101; x++) {
    console.log(x);
}
VM4957:2 0
VM4957:2 100

for (let x = 0; x < 101; ++x) {
    console.log(x);
}
VM4964:2 0
VM4964:2 100

for (let x = 0; x < 101; x++) {
    // console.log(x);
    if (x % 3 == 0){
        console.log(x);
    }
}
VM4970:4 0
VM4970:4 3
VM4970:4 6
VM4970:4 93
VM4970:4 96
VM4970:4 99

let result = 0;
for (let x = 0; x < 101; x++) {
    // console.log(x);
    if (x % 3 == 0){
        result += x
    }
    if (x % 5 == 0){
        result += x
    }
    if (x % 15 == 0){
        result -= x
    }
}

console.log(result); // 2418

let result = 0;
for (let x = 0; x < 101; x++) {
    if (x % 3 == 0 || x % 5 == 0){
        result += x
    }
}
console.log(result); // 2418

a = 100000000 // 100000000
b = 100000000 // 100000000
Object.is(a, b) // true
// ECMA Script2015 추가
// https://stackoverflow.com/questions/50530936/is-there-any-method-to-check-memory-address-of-javascript-variable

Object.is(0, -0) // false

let x = true
let y = false
!(x || y) // false
false || true // true
true && false // false
false || false // false
true && true // true
!true // false
!((true && false) || (true && false)) // true

let x = 10
!((x % 5 == 0 && x % 2 == 0) || (x / 2 == 5 && false)) // false
let y = 10
(false && y % 2 == 0) && (y / 2 == 5 && false) // false
let z = 3
(true && z % 3 == 0) || (z / 2 !=!= 5 && false) // SyntaxError: Unexpected token '!='
true || console.log('hello') // true
false || console.log('hello') // hello
x = true // true
y = true // true
!(x || y) // false
(!x && !y) // false
let age = 10
let accessAllowed = (age > 18) ? true : false;
accessAllowed // false
(age > 18) ? console.log('성인입니다!!') : console.log('미성년자입니다!!') // 미성년자입니다!!
let job = true;
job && '완료' || '미완료' // '완료'
job = false; // false
job && '완료' || '미완료' // '미완료'
typeof(5) // 'number'
typeof('5') // 'string'
typeof("5") // 'string'
typeof('''5''') // VM6000:1 Uncaught SyntaxError: Unexpected string
typeof(`5`) // 'string'
typeof('"5"') // 'string'
true? console.log(1) : console.log(2) // 1
false? console.log(1) : console.log(2) // 2

let value = 10;
value % 2 == 0? console.log(1) : console.log(2) // 1

'호준'?'천재':'바보' // '천재'
Boolean('호준') // true
Boolean('') // false
Boolean(1) // true
Boolean(0) // false
Boolean(' ') // true
Boolean(-1) // true
Boolean(true) // true
Boolean('true') // true
Boolean('false') //true
typeof '5' // 'string'
typeof 5 // 'number'
typeof true
'boolean'
String(5)
'5'
Number(true)
1
Number(false)
0
Number('5')
5
typeof([1, 2, 3, 4])
'object'
typeof({'one':'하나', 'two':'둘'})
'object'
typeof('1' + 1)
'string'
'1' + 1
'11'
1 + '1'
'11'
'11' - 1
10
//헷갈리는 형변환
undefined
Boolean([])
true
Boolean({})
true
// 회사에서 주로 사용하는 형변환
undefined
String(123)
'123'
123.toString()
VM7255:1 Uncaught SyntaxError: Invalid or unexpected token
let x = 10
undefined
x.toString()
'10'
// 위에서 언급한 2개 사용하지 않습니다.
undefined
// Case마다 다릅니다!! (절대로 사용하지 않는다는 법칙은 없습니다.)
undefined
123 + ''
'123'
!!true
true
!!'hojun'
true
!!''
false
!!1
true
!!0
false
!!undefined
false
!!NaN
false
!true
false
!(!true)
true
'0' == 0
true
0 == ''
true
0 == '0'
true
false == 'false'
false
false == '0'
true
false == null
false
false == undefined
false
false == NaN
false
!!null
false
!!undefined
false
!!NaN
false
Boolean('false')
true
false === 0
false
false == 0
true
false == '0'
true
'false'
'false'
'11'-'sdaf'
NaN
let x = '10000'
undefined
+x
10000
-x
-10000
+x
10000
x * 1
10000
+x
10000
x = -10000
-10000
x = '-10000'
'-10000'
+x
-10000
x = +x
-10000
x
-10000
Number('10')
10
parseInt('1230123', 10)
1230123
parseInt('1230123asdfasdf', 10)
1230123
x = '123asdfasdf'
'123asdfasdf'
+x
NaN
  • 형변환에서 Number()보다는 parseInt()를 더 추천. 더 빠르기도하고
    근데 parseInt 는 몇진수로 변환하겠다 딱 나타낼 수 있는데, Number 는 객체 생성으로 접근해서 조금 동작이 다르다.
  • 파이썬의 창시자도 10점 만점에 8점을 매겼다.
  • 언어마스터라는 표현은 의미가 없는 말..!
  • 목적의 달성은 boolean이 아니라 double이다.
  • 특정 언어를 잘하는 사람은 매우 경쟁력 있는 사람
  • 남들과 구별되는 강점은 무엇인가?
    남들이 해본 것을 해본것은 남들밖에 안된다.
    지식란 '존재를 알기 전까지는 존재를 알지 못한다'
  • https://cryptozombies.io/ko/
  • 손코딩 버그 0인 사람도 있다..
  • 뭘 만들어봐 했을 때 컴퓨터 앞에 앉았을 때의 막막함
  • 단순 지식의 습득 뿐만
  • 카드뒤집기 게임 같은 프로젝트가 별 4개짜리
  • 보통 기업에서 별 3개짜리 과제면 합격할 수 있는 것 같다.
  • 별 5개를 뽑아낼 수 있다면 시니어 레벨이다.
  • 벤딩머신까지는 충분히 풀 수 있어야 되는데
  • 네카라쿠배까지는 '준'시니어를 모집하는 것 같다.

4.5개 문제를 내고 연봉도 많이 주고^^

// Number와 parseInt 어떤게 실무에서 더?
let value = new Number(100);
value = 
  • 형변환에서 Number은 다른 목적에 따라 다르게 쓸수도 있기 때문에 애초에 목적이 형변환인 parseInt를 써주자 이 말
  • 자신감의 주기
  • 1~2년차 때 자신감 충만, 떨어지는 순간이 오는데
if (true) {
    console.log(1);
} else if(true) {
    console.log(2);
} else if(true) {
    console.log(3);
} else if(true) {
    console.log(4);
} else if(true) {
    console.log(5);
} else {
    console.log(99);
}
// 1

if (false) {
    console.log(1);
} else if(true) {
    console.log(2);
} else if(false) {
    console.log(3);
} 
if (true) {
    console.log(4);
}
if (false) {
    console.log(5);
} else if(true) {
    console.log(6);
} else if(false) {
    console.log(7);
} else {
    console.log(99);
}
/*
2 
4 
6
*/
if (score >= 90) {
    console.log('mom: i\'m so happy!')
    money += 1000000
} else if (score >= 80) {
    console.log('mom: i\'m happy!')
    money += 100000
} else if (score >= 70){
    console.log('mom : i\'m happy');
    money += 10000;
}else if (score >= 60){
    console.log('mom : happy?');
    money += 10000;
} else {
    console.log('...');
}
  • escape 문자()
  • scope는 범위 제한할 때
  • 삼항연산자를 중첩해서 사용하지 말자
  • 스칼라로 웹개발 하시는 구글 알고리즘 대회 10등하신 분..ㅋㅋㅋ 100위 안에 들려면 언어를 만들어야한다.
  • 어떻게든 3달내로 끝내자는 생각이 결과를 만들어주지는 않는다. 장기간으로 보고 하자. 걱정 공포할 시간에 조금이라도 더 성장하자
  • 코테 문제 푸는게 재밌다면 BE가 맞다..!!
switch (/*new Date().getDay() 오늘은 월요일*/ 1 ) {
  case 0:
    document.write('일요일입니다.')
    break;
  case 1:
    document.write('월요일입니다.')
    break;
  case 2:
    document.write('2번째 case입니다.')
    break;
  case 3:
    document.write('3번째 case입니다.')
    break;
  default:
    break;
}
// 월요일입니다.
  • if 문 vs switch 문
    if문은 순서대로 내려가는데, switch는 한번에 점프해서 간다.
    분명 성능상에 차이는 있을 것
    if문이 중첩되어 여러개 늘어질 때는 switch가 맞고,
    또 중간에 형변환 일어날 경우도 switch가 맞다.
  • switch문을 실무에서?? → 많은 프로젝트를 해봤지만 1~2번 사용한듯. 대부분 if문으로 한듯
    다른 언어 산업에서는 좀 쓰는 경향. for문으로만 값이 들어오는 것이 아니라서
  • for문보다 while문을 많이 하셨다는
    논리구조가 while문이 확연히 드러난다고 생각하셨다는
  • JS에서는 -1 index 허용하지 않는다.
  • for in, for of https://youtu.be/gtQ7hG09qG0
  • scope고려해서 변수 선언 위치 정해줘야한다.
  • 2n이라 적으면 BigInt()
//구구단 코드
for(let i = 2; i < 10; i++){
    for(let j = 1; j < 10; j++){
        console.log(`${i} X ${j} = ${i*j}`)
    }
}
  • 좋은 코테 풀이는 외워둬라 아예
  • 8 숫자 세는 문제 좋은 풀이
function countEight (number) {
  let array = Array.from(new Array(number), (x,i) => i + 1)
  return array.join("").split("8").length-1;
}

Array.apply( null, Array( 10000 ) ).map( ( v, i ) => { return i } ).join( "" ).match( /8/g ).length

댓글