소개
- 現 어비스 대표 및 리드개발자
- 前 네이버 개발자
- 4년차 알고리즘 강사(네이버 / 카카오 / 라인 / 삼성 코딩테스트합격자 배출)
- 19, 20 IT 대기업 코딩테스트 합격자(All Solved)
- 자바스크립트 테스트 프레임워크 Mocha.js contributor
- 저서 《 면접을 위한 CS전공지식노트 》 2022 / 국내IT도서 1위 베스트 셀러
- 저서 《 실시간 모니터링 시스템을 만들면서 정복하는 MEVN 》 2021 / 국내IT도서 63위 베스트셀러
강의
전체2수강평
- 이해하기 쉽고 재밌게 잘가르치시는것 같습니다
양준호
2024.04.10
1
- 학부시절 들었던 내용을 정리하게 도와주셔서 감사합니다.
kitt_92
2024.04.09
1
- 굿!!!!!!
김표성
2024.04.08
1
게시글
질문&답변
2024.04.27
서브넷에 대해서 질문이 있습니다.
안녕하세요 snagjin님ㅎㅎ 클래스풀도 결국 서브넷과 관련이 있는것인가? >> 네 관련있습니다. 클래스리스 관점에서 서브넷팅,슈퍼넷팅이란 결국 클래스를 기반으로 거기서 더 세분화해서 네트워크를 쪼갠다라는 의미가 맞나요?? >> 서브넷팅은 쪼갠다. 슈퍼넷팅은 합친다라는 의미이며 클래스리스에서도 서브넷팅, 슈퍼넷팅의 의미는 그대로 적용됩니다. 좀 더 자세히 설명을 드려보겠습니다. 클래스풀 네트워킹 클래스풀 네트워킹은 IP 주소를 클래스 A, B, C 등으로 나누는 초기의 방법입니다. 각 클래스는 고정된 네트워크 및 호스트 부분을 가지며, 예를 들어: 클래스 A: 네트워크.호스트.호스트.호스트 (예: 10.x.x.x) 클래스 B: 네트워크.네트워크.호스트.호스트 (예: 172.16.x.x) 클래스 C: 네트워크.네트워크.네트워크.호스트 (예: 192.168.1.x) 여기서 주어진 예에서 보듯이, 클래스 C 네트워크에서는 첫 3개의 옥텟이 네트워크 주소로 사용되고, 마지막 옥텟이 호스트 주소로 사용됩니다. 클래스풀 서브넷팅은 이러한 고정된 구분을 기반으로 작은 네트워크로 나누는 것을 말합니다. 클래스리스 네트워킹 클래스리스 네트워킹은 클래스 기반의 제한을 없애고, 더 유연하게 네트워크 주소를 할당할 수 있게 합니다. 이 방법에서는 서브넷 마스크(subnet mask) 를 사용하여 네트워크와 호스트 부분을 동적으로 나눌 수 있습니다. 예를 들어, CIDR(클래스리스 도메인 간 라우팅) 표기법을 사용해 192.168.0.0/22는 192.168.0.0부터 192.168.3.255까지의 IP 범위를 가리키며, 이는 전통적인 클래스 C의 범위를 확장한 것입니다. [참고] 192.168.0.0/22는 네트워크 주소가 192.168.0.0이고, 서브넷 마스크가 상위 22비트가 네트워크 주소로 사용된다는 것을 의미합니다. 이 서브넷 마스크는 IP 주소 범위를 192.168.0.0부터 192.168.3.255까지로 정의합니다. 네트워크 주소: 192.168.0.0 서브넷 마스크: 255.255.252.0 (이진수로 변환하면, 처음 22개 비트가 1, 나머지 10개 비트가 0) IP 주소 범위: 192.168.0.0부터 192.168.3.255 총 주소 수: 2^10 = 1024개 (상위 22비트가 네트워크 주소, 하위 10비트가 호스트 주소) 클래스리스에서의 서브넷팅과 슈퍼넷팅 클래스리스 환경에서 서브넷팅은 주어진 IP 주소 범위를 더 작은 네트워크로 나누는 것을 의미합니다. 예를 들어, 192.168.0.0/24 네트워크를 192.168.0.0/25와 192.168.0.128/25로 나눌 수 있습니다. 이는 각각의 서브넷이 128개의 주소를 갖게 됩니다. 슈퍼넷팅은 반대로, 여러 작은 네트워크를 하나의 큰 네트워크로 합치는 것을 말합니다. 예를 들어, 192.168.0.0/24와 192.168.1.0/24 두 네트워크를 합쳐서 192.168.0.0/23로 만드는 것이 가능합니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 48
질문&답변
2024.04.27
6-A 2792 보석 상자 런타임 에러 (DivisionByZero) 질문이 있습니다.
안녕하세요 mahns님ㅎㅎ while(left search - mid에 0이 들어갈 수 있어서 이런 문제가 발생한것 같은데요. 아마 이부분은 mahns님도 잘 파악하신 것으로 보입니다. 제 생각에 이 질문은... 제 코드와 비슷한데 왜 0이 들어가냐... 그런것 같습니다. 맞죠? ㅎㅎ 바로 이부분입니다. 이부분을 1로 바꿔보시겠어요? int left = 1, right = 0, mid; mahns님 코드에서 (그 틀린 코드) 이부분만 고치시면 맞다고 뜨게 됩니다. 이렇게 생각하시면 됩니다. 1 + a / 2 는 0이 나올 수 없습니다. 그리고 이 문제에서 나오는 a의 경우 다음 M개 줄에는 구간 [1, 10 9 ]에 포함되는 양의 정수가 하나씩 주어진다. K번째 줄에 주어지는 숫자는 K번 색상 보석의 개수이다. 이렇게 1이상인게 자명하구요. ㅎㅎ 그렇다면 왜 left를 0이 아닌 1로 놓아야할까요? 이분탐색을 할 때 left와 right를 기반으로 올바른 값을 찾아가죠? right는 보통은 매우큰값 또는 문제에서 주어진 값들중 최대의 값을 넣습니다. left는 문제에서 주어지는 값 중 가장 작은 값을 넣어야 합니다. 이 문제에서 가장 작은 값은 1이기 때문에 1을 넣어야 하는 것이죠. [1, 10 9 ]에 포함되는 양의 정수가 하나 물론 0을 넣어서 예외케이스를 만들어 해결할수도 있지만 이분탐색 알고리즘 자체가 left와 right 사이의 있는 값들 중 최적해를 ret에 넣어서 끝내는 알고리즘이기 때문에 문제에서 주어지는 범위를 기반으로 짜는 코드가 더 정확한 코드라고 보시면 됩니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 29
질문&답변
2024.04.26
7-M 시간초과 질문있습니다.
안녕하세요 인창님 ㅎㅎ 솔직히 인창님의 로직이나 코드 자체가 괜찮다고 생각합니다. (사진) 저도 사실 이런 식으로 몇번 시도해봤는데... 시간초과가 뜨네요. 흠... 의심가는 부분은 deque의 sort부분인데요. (사진) 벤치마크를 돌려본 결과 vector에 비해 느리긴 하지만.. 뭐 이건 느리다고도 할 수 없는 수준입니다. 벤치마크 코드. #include using namespace std; void A(){ vector v; for(int i = 500; i >= 1; i--){ v.push_back(i); } sort(v.begin(), v.end()); } void B(){ deque v; for(int i = 500; i >= 1; i--){ v.push_back(i); } sort(v.begin(), v.end()); } void test_latency(size_t iteration) { PROFILE_START("A"); A(); PROFILE_STOP("A"); PROFILE_START("B"); B(); PROFILE_STOP("B"); } int main() { const size_t warmups = 1000; const size_t tests = 100; PROFILE_RUN_ALL(warmups, tests, test_latency(__loop); ); return 0; } 사이트 : https://perfbench.com/ 부족한 답변을 드려 죄송하다는 말씀을 드립니다. ㅜ P.S 제가 이거는 좀 더 보다가 맞는 답변이 생각나면 다시 달겠습니다. 감사합니다.
- 0
- 1
- 40
질문&답변
2024.04.26
Map에서 BFS탐색을 하는 경우에도 O(V+E) 시간복잡도인가요?
안녕하세요 ㅎㅎ 2-A 2178번처럼 Map에서 BFS 탐색을 하는 경우에도 시간복잡도는 O(V+E)인가요? >> 이것 같은경우는 V와 E가 아닌 맵을 기반으로 산정하는게 맞습니다. 즉, N * M이 맞습니다. 예를 들어 입력이 이렇게 나올 수도 있죠? 4 6 111111 111111 111111 111111 이 경우 4 * 6이 됩니다. (맵전체를 탐색해야 하므로) 보통 문제를 기반으로 시간복잡도 산정 -> 최악의 시간복잡도를 고려하기 때문에 최악으로 고려했을 때는 맵의 크기 전체를 탐색한다 등을 기반으로 산정해야 하므로 N * M으로 해야 합니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 31
질문&답변
2024.04.26
문제풀이 질문 드립니다
안녕하세요 ㅎㅎ 2309번 문제를 스스로 풀어본다. >> 푸는것 시도 -> 바로 강의 보셔도 됩니다. 그리고 문제가 풀리지 않을때는 고민해보다가 답지를 보는게 나을까요?? >> 네 맞습니다. 결국은 혼자하셔야 하는 것이기 때문에 고민을 하시다가 답지를 보셔야 합니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 30