TIL - 2020.10.14

내일은 일찍 일어나야해서 평소보다 일찍 작성하는 TIL이다.

👉 오늘 한 일

  • 최백준 강사님 알고리즘 특강
  • React 프로젝트 개발
  • Node.js 강의

👉 공부한 내용

  • 오늘은 백준 알고리즘의 대표인 최백준 강사님의 특강을 들었다. 코딩 테스트와 관련되서 좋은 이야기를 많이 해줬다.

    1. 가장 먼저 파악해야하는 것은 N(입력의 크기)제한이다. -> 시간 복잡도와 관련이 있다.
    2. 시간 제한 vs 메모리 제한 → 시간 제한이 더 중요, 메모리는 거의 제한 내에 해결 됨, 메모리 제한에 넘어가면 대부분 시간 제한에 넘어간다!
    3. 원리와 증명은 중요하나 코딩 테스트에서는 응용하는 것을 더 중요하게 생각한다.
    4. 어떤 문제를 보고 도움 없이 무조건 스스로 방법을 떠올려야 할 필요는 없다.
    5. 어떻게 든 스스로 풀어내고 말겠다. → 좋은 생각이지만 시간 대비 효율이 낮다. 검색을 하는 것도 매우 중요한 능력이다.
    6. 조금 고민 해보고 모르겠으면, 답을 보고 이해하자! → 블로그, 백준 사이트에 올라와 있는 답 참고
    7. 이해는 못 하겠으니, 문제의 답을 외워야겠다. → 코딩 테스트엔 내가 안 외운 문제가 나온다.
    8. 기출 문제를 열심히 풀고, 비슷한 내용이 나오는 문제를 풀어야겠다. → 비슷한 알고리즘을 사용하는 문제를 풀어보는 것이 좋다.
    9. BFS, 브루트 포스, 다이나믹 프로그래밍도 아는데 문제를 못 풀겠다. → 각 알고리즘을 왜 사용해야하는지 알면 풀 수 있을 것이다.
  • 가장 중요한 알고리즘

    시뮬레이션 - 구현 능력이 가장 중요하다.
    브루트 포스 - 보통 재귀 함수로 많이 풀린다.
    BFS - 그래프 문제
    다이나믹 프로그래밍 - 필살기 느낌으로 준비할 것

  • 사람들이 자주 실수하는 부분

    1. 출력 형식을 잘못 맞춰서 틀릴 때가 있다.
    2. 자료형의 범위를 벗어나서 틀릴 때가 있다.
    3. pow, strlen과 같은 함수를 계속 호출하면 시간 초과가 걸린다.
    4. python에서 자주 사용하는 연산의 시간 복잡도는 알아둬야 한다.
    a = list(range(1, 10000001))
    a = a + [1000001] # O(N)
    a.append(1000001) # O(1)
    a = a + [1, 2, 3] # O(N+K)
    a.extend([1, 2, 3]) #O(K)
    a += [4, 5, 6] # O(K)
    
    if 10 in a: # O(N)
    	print(1)
    
    print(len(a)) # O(1)
    # 구글에서 python time complexity로 검색

    C++

    • c++에서 string의 += 연산은 O(K) 이다.
    • c++에서 string의 + 연산은 O(N+K) 이다.
    • 정수 정렬은 NlogN
    • 문자열 정렬은 문자열의 길이
    • if(3 < 4) 는 O(1)
    • if("AAAA" < "ABCD")는 O(문자열 길이)

추가로 알려주신 내용이 많지만 아직 정리를 깔끔하게 못해서 이렇게 올린다!

  • 리액트 프로젝트 개발을 계속 진행하며 디자인을 입혔다.
  • Node.js 특강을 들었다.

    유용한 사이트들
    modulecounts.com - 사용되는 모듈의 수를 확인할 수 있는 사이트
    npmjs.com - 라이브러리를 확인할 수 있는 사이트
    pngquant.org - 이미지 사이즈를 줄여주는 라이브러리를 받을 수 있는 사이트

    - Node.js는 locking이 없고 다 callback → callback hell에 빠질 수 있음
    - 동기 - 비동기의 대상: 클라이언트 - 서버와 매칭
    - blocking - nonblocking의 대상: user level - kernel level과 매칭
    - 비동기의 nonblocking이 가장 성능이 좋음
    - reactor: 유저 레벨에서 요청해서 커널 레벨에서의 콜백을 기다림
    - proactor: 유저 레벨을 거치지 않고 커널 레벨로 바로 요청을 한 후 유저 레벨로 콜백
    - 비동기 + non-blocking은 리눅스(ePoll)보다 윈도우(IOCP)가 더 좋음
    - Restful api: 리소스(url)와 연산(POST, GET, PUT, DELETE)을 분리하자는 컨셉

필기한 내용을 적었는데 기회가 되면 내가 추가로 공부를 한 후에 포스팅을 해보고 싶다! 백엔드 프로그래밍을 잘 몰라서 언제가 될지는 모르겠지만😂

☕️ 잡담

필기를 한 것을 거의 그대로 올려서 정리가 좀 안 된 느낌이 있다 ㅠㅠ 추가로 더 정리를하고 강사님께 여쭤보고 추가로 업로드할 수 있는 내용이 있으면 할 계획이다!
프로젝트 개발을 열심히하고 있는데 꼭 기간내로 마무리할 수 있으면 좋겠다!🙏


📑 참고사이트

좋은 웹페이지 즐겨찾기