소개
- 現 어비스 대표 및 리드개발자
- 前 네이버 개발자
- 5년차 알고리즘 강사(네이버 / 카카오 / 라인 / 삼성 코딩테스트합격자 배출)
- 19, 20 IT 대기업 코딩테스트 합격자(All Solved)
- 자바스크립트 테스트 프레임워크 Mocha.js contributor
- 저서 《 면접을 위한 CS전공지식노트 》 2022 / 국내IT도서 1위 베스트 셀러
- 저서 《 실시간 모니터링 시스템을 만들면서 정복하는 MEVN 》 2021 / 국내IT도서 63위 베스트셀러
강의
전체2수강평
- 강의 퀄리티가 만족스럽지 않아요.
김정훈
2024.08.23
0
게시글
질문&답변
2024.09.18
4-O 반례나 어디가 문제인지 알 수 있을까요?
안녕하세요 ㅎㅎ 사실 이 코드는 제가 여러번 디버깅을 해보며 시도를 해봤습니다. 2의 승수를 이용해서 로직을 짠점. 올바른 분기점에서의 break; skip 부분까지 완벽하다 생각합니다. 다만, 생각해보면 flag가 1이 아니면서 -> c가 ( 또는 )인 상태로 반례를 만들면 되지 않을까? 했는데 해당 부분 또한 맞다고 뜹니다. 죄송하지만 어떤 문제가 있는지 파악하지 못하는 것 같습니다. 이부분은 제가 나중에 또 시도해보고 반례를 찾으면 다시 답변을 드리겠습니다. 감사합니다.
- 0
- 2
- 22
질문&답변
2024.09.18
해설 코드 질문있습니다
안녕하세요 수현님 ㅎㅎ 네 잘 이해하셨습니다. 각 단계에서 가능한 모든 말을 이동시키고, 각 말이 도착한 위치에서 얻을 수 있는 점수를 계산. 말이 이동할 수 있는 경우의 수는 총 4자기 -> 이중 최대값을 계산해야 함. 따라서 그 경우의 수로 이동했을 때의 값을 더한 것 중 최대값이라는 구조가 되어야 하므로 -> ret = max(ret, go(here + 1) + v[mal_idx]); 그 중에서 최대 점수를 선택한 후, 다음 단계로 넘어가며 또다시 최대 점수를 선택하는 과정을 반복. 이렇게 마지막 주사위까지 처리된 후, 각 단계에서의 최대 점수를 더한 값이 최종적으로 출력. -> mal[i] = temp_idx; 이동한 것을 원복해서 각 경우의 수가 독립적으로 만듬 -> go 함수가 재귀적으로 호출 -> if(here == n) return 0; -> 마지막에 기저사례에 걸리면 해당 경우의 수로 부터 얻어져온 것 중에서 최대값을 골라 -> 각 단계에서 최대 점수를 더하고 더한 값이 최종적으로 최대값이 출력이 됩니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
- 0
- 2
- 16
질문&답변
2024.09.18
7-J 질문있습니다 :)
안녕하세요 유태님 ㅎㅎ 하지만 이 문제는 K라는 무게 제한이 있다보니 그리디가 조금 빡셀 수도 있겠다 싶더라구요. -> K라는 무게제한이 아니라 문제에서 주어진 상태값을 -> 배열로 담기가 힘들면 그리디로 풀 생각을 해야 합니다. 그리디로 설계할 수 있는 문제인지 -> 이 문제는 그리디로 풀 수 없을 것 같습니다. 그리디로 풀만한 명제가 없는 것 같아요. 감사합니다.
- 0
- 2
- 5
질문&답변
2024.09.17
for문 초기값 설정 방식에 대한 시간 초과 질문 있습니다.
안녕하세요 영찬님 ㅎㅎ 강의 외의 문제에 대한 질문은 받지 않습니다. 다만, 이 두개의 코드의 차이점은 있지만 사실 그렇게까지 시간초과가 차이나는 코드라고 볼 수 없다고 생각합니다. 제생각에는 이 경우 문제가 너무 타이트하게 주어져서 그런 것 같습니다. 감사합니다.
- 0
- 2
- 10
질문&답변
2024.09.15
1-L 질문드립니다.
안녕하세요 김준님 ㅎㅎ 만약 abs 를 사용한다면, m = 10 이고 numbers[i] = 14 일 때, abs(10 - 14) = abs(-4) = 4 가 됩니다. 즉 -4가 나와서 -> 해당 경우의 수는 배제가 되어야 하는데 갑자기 4를 찾게 되서 UB가 발생하게 됩니다. 하지만 이 abs를 쓸 수 있는 방법이 있습니다. 바로 sort() 오름차순을 쓰면 되는데요. 예를 들어 오름차순 정렬을 하면 -> a, m , b 이렇게 있다고 했을 때 a 여기서 m - a는 b가 나오며 양수입니다. 자 그 다음 b를 만났을 때 어차피 start부터 탐색을 이어나가니 abs를 걸어서 -> 양수 a가 나오더라도 a는 탐색범위에서 벗어나니 abs를 써도 로직상 문제가 없게 됩니다. 전체 코드는 다음과 같습니다. #include using namespace std; /* 갑옷 재료는 번호가 있다. 갑옷은 2개의 재료로 만든다. 두 갑옷의 번호를 합쳐 M이 되면 갑옷이 된다. 1 &numbers) { int sum = 0; if (n == 1 || m == 1 || m > 200'000) { cout > n >> m; vector numbers; for (int i = 0; i > num; numbers.push_back(num); } Solution(n, m, numbers); return 0; } 김준님도 즐추보내세요 ㅎㅎ 감사합니다.
- 0
- 2
- 15