내일은 일찍 일어나야해서 평소보다 일찍 작성하는 TIL이다.
오늘은 백준 알고리즘의 대표인 최백준 강사님의 특강을 들었다. 코딩 테스트와 관련되서 좋은 이야기를 많이 해줬다.
- 가장 먼저 파악해야하는 것은 N(입력의 크기)제한이다. -> 시간 복잡도와 관련이 있다.
- 시간 제한 vs 메모리 제한 → 시간 제한이 더 중요, 메모리는 거의 제한 내에 해결 됨, 메모리 제한에 넘어가면 대부분 시간 제한에 넘어간다!
- 원리와 증명은 중요하나 코딩 테스트에서는 응용하는 것을 더 중요하게 생각한다.
- 어떤 문제를 보고 도움 없이 무조건 스스로 방법을 떠올려야 할 필요는 없다.
- 어떻게 든 스스로 풀어내고 말겠다. → 좋은 생각이지만 시간 대비 효율이 낮다. 검색을 하는 것도 매우 중요한 능력이다.
- 조금 고민 해보고 모르겠으면, 답을 보고 이해하자! → 블로그, 백준 사이트에 올라와 있는 답 참고
- 이해는 못 하겠으니, 문제의 답을 외워야겠다. → 코딩 테스트엔 내가 안 외운 문제가 나온다.
- 기출 문제를 열심히 풀고, 비슷한 내용이 나오는 문제를 풀어야겠다. → 비슷한 알고리즘을 사용하는 문제를 풀어보는 것이 좋다.
- BFS, 브루트 포스, 다이나믹 프로그래밍도 아는데 문제를 못 풀겠다. → 각 알고리즘을 왜 사용해야하는지 알면 풀 수 있을 것이다.
가장 중요한 알고리즘
시뮬레이션 - 구현 능력이 가장 중요하다.
브루트 포스 - 보통 재귀 함수로 많이 풀린다.
BFS - 그래프 문제
다이나믹 프로그래밍 - 필살기 느낌으로 준비할 것
사람들이 자주 실수하는 부분
- 출력 형식을 잘못 맞춰서 틀릴 때가 있다.
- 자료형의 범위를 벗어나서 틀릴 때가 있다.
- pow, strlen과 같은 함수를 계속 호출하면 시간 초과가 걸린다.
- 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(문자열 길이)
추가로 알려주신 내용이 많지만 아직 정리를 깔끔하게 못해서 이렇게 올린다!
유용한 사이트들
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)을 분리하자는 컨셉
필기한 내용을 적었는데 기회가 되면 내가 추가로 공부를 한 후에 포스팅을 해보고 싶다! 백엔드 프로그래밍을 잘 몰라서 언제가 될지는 모르겠지만😂
필기를 한 것을 거의 그대로 올려서 정리가 좀 안 된 느낌이 있다 ㅠㅠ 추가로 더 정리를하고 강사님께 여쭤보고 추가로 업로드할 수 있는 내용이 있으면 할 계획이다!
프로젝트 개발을 열심히하고 있는데 꼭 기간내로 마무리할 수 있으면 좋겠다!🙏