소개
- 現 어비스 대표 및 리드개발자
- 前 네이버 개발자
- 4년차 알고리즘 강사(네이버 / 카카오 / 라인 / 삼성 코딩테스트합격자 배출)
- 19, 20 IT 대기업 코딩테스트 합격자(All Solved)
- 자바스크립트 테스트 프레임워크 Mocha.js contributor
- 저서 《 면접을 위한 CS전공지식노트 》 2022 / 국내IT도서 1위 베스트 셀러
- 저서 《 실시간 모니터링 시스템을 만들면서 정복하는 MEVN 》 2021 / 국내IT도서 63위 베스트셀러
강의
전체2수강평
- 헷갈리는 부분 정말 친절하게 설명해주십니다 !!
장혁준
2024.05.24
1
게시글
질문&답변
2024.05.30
2-B. 유기농 배추 질문있습니다.
안녕하세요 룰루님 ㅎㅎ for (int i = 0; i 이부분을 while문이 아닌 for문으로 하셨다는거죠? for문과 while문의 시간복잡도는 크게 상이하지 않습니다. for문도 괜찮고 while문도 괜찮습니다. 또한, while문의 시간 복잡도를 구하는게 조금 헷갈리는데 간단하게라고 설명 해주시면 감사하겠습니다. >> while문이 얼마나 동작했나를 보시면 됩니다. 이 문제의 해설코드 같은 경우 while(T--)를 했기 때문에 while문의 시간복잡도는 O(T)가 됩니다. 다만, 이 코드를 제출했을 때 틀렸습니다가 나오는데 혹시 코드 잘못올리신게 아닌가요? 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 20
질문&답변
2024.05.30
1-L combi 방식으로 했을때 시간초과
안녕하세요 현이님ㅎㅎ 기저사례를 잘못 걸어서 함수가 불필요하게 많이 호출되서 그렇습니다. 기저사례는 반드시 return을 해주어야 합니다. void combi(int start, vector &b) { if (b.size() == 2) { int sum = 0; for (int i = 0; i 이렇게 해보시겠어요? 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 21
질문&답변
2024.05.29
5-H 질문
안녕하세요 ㅎㅎ 로직상 그렇습니다. 이 문제의 풀이로직이 이렇게 나눠진다고 보시면 됩니다. 이 idx를 포함한 unique한 수열의 경우의 수 + 이 범위에서 unique한 수열의 경우의 수 이 idx를 포함한 unique한 수열의 경우의 수의 경우 a, b, c 라고 했을 때 a를 포함하는 unique한 수열의 경우의 수는 a a b a b c 이겠죠? 그리고 나서 idx를 오른쪽으로 움직여가면서 해당 로직을 반복하는 것이죠. 그러나 마지막에 이 범위에서 unique한 수열의 경우의 수의 수 같은 경우 a, b, c라고 했을 때 a b c a, b b, c a, b, c 가 되기 때문입니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 1
- 46
질문&답변
2024.05.29
안녕하세요 선생님 reverse 함수 사용하지 않고 문제풀이 해봤는데...
안녕하세요 진우님 ㅎㅎ 대략적인 부분도 잘 짜셨구 for문으로 하셔도 됩니다. 다만 bool부분이 틀린 것 같습니다. 이렇게 고쳐볼까요? #include using namespace std; int main() { string str; bool flag = true; // 초기 값을 true로 설정 cin >> str; // 문자열의 절반만 확인 for (int i = 0; i 또한 문자열 전체를 확인해도 되지만 앞의 코드처럼 문자열 반만 확인해도 됩니다. 예를 들어 abcd라고 했을 때 a - d 확인하고 -> 나중에 d - a를 확인하나 둘 다 똑같기 때문입니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 2
- 42
질문&답변
2024.05.29
3-O 질문 있습니다
안녕하세요 honn님 ㅎㅎ cnt가 찾은 ret 이상이면 (제 코드에서는 mn) return하는 코를 안 적으면 왜 시간초과가 나는지 잘 모르겠습니다. 문제를 풀 때 최악의 상황을 생각해서 그 최악의 상황을 돌렸을 때 제한 시간안에 돌아가야 한다고 생각합니다. 만약 정답이 가로선 3개를 추가하는 것인 최악의 상황에서 이 코드가 유의미한 시간복잡도 차이를 만들어내지 못하는게 아닌가 하고 생각합니다. 이 문제 같은 경우 테스트케이스가 그러한 방식으로 짜여져있어서 통과와 시간초과라는 차이를 만드는 것인지 궁금합니다. >> 먼저 이 알고리즘의 유형은 백트래킹인데 백트래킹의 시간복잡도를 잡는 것은 어렵습니다. 물론 문제 시작전에 시간복잡도 최악으로 잡고 드가야 하고 -> 어? 이거 이부분에서 return 하게 되면 불필요한 정점은 탐색하지 않게 되네? -> 하면서 수정하는게 백트래킹인데 이 백트래킹까지 고려하면서 시간복잡도를 잡는게 어렵습니다. 문제를 풀 때 최악의 상황을 생각해서 그 최악의 상황을 돌렸을 때 제한 시간안에 돌아가야 한다고 생각합니다. 라는 말씀은 맞습니다만 백트래킹의 경우 백트래킹을 넣은 최악의 상황잡기가 어려워서 대략적으로 판단하셔야합니다. com++; if (cnt > 3) return; // || cnt >= mn 생략했더니 시간초과 이부분에서 mn을 넣게 되면 당연히 불필요한 부분은 줄일 수 있기 때문에 시간을 줄일 수 있는 부분이고 TC가 그런 부분에서 차이를 많이 두게 설계된 것 같습니다. 전에 선생님께서 가르쳐주신 조합 코드를 생각해보면 한번 확인한 위치는 다시는 확인을 안 하도록 start+1을 해서 코드를 작성했던 기억이 납니다. 하지만 이 코드는 확인했던 행 - 1까지는 확인을 안하도록 here을 사용하지만 열, 즉 j는 1부터 확인함으로써 중복으로 검사하고 있습니다. 왜 무한루프가 안 생기는지 이해가 잘 되지 않습니다. for (int i = start; i >> 이부분 말씀이신가요? 저거는 근데 어쩔 수 없는게 v[1][2]를 탐색하고 -> v[1][3]을 탐색하려면 i = start로 잡을 수 밖에 없어요. 그리고 if(v[i][j])를 걸어서 v[1][2] 중복 탐색은 막습니다. 검사는 하지만 -> 탐색은 막습니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 2
- 35