게시글
질문&답변
알고리즘교안(C++) 질문이 있습니다.
안녕하세요 ㅎㅎ1번 맞습니다. ㅎㅎ ㅠ 저부분은 틀린 부분입니다. 참고로 vector의 size() 메서드는 size_t 타입(부호 없는 정수형) 을 반환합니다. 이 타입은 일반적으로 64비트 환경에서는 unsigned long 또는 unsigned long long으로 정의되어 있습니다. 따라서 v.size() - 10 과 같이 음수가 될 수 있는 연산을 수행하면, 결과가 음수가 아닌 매우 큰 양수로 나타날 수 있습니다.이는 size_t가 부호 없는 정수(음수가 없는 정수)이기 때문에, 음수 결과가 언더플로우 되기 때문입니다.즉, size()의 반환값을 이용해 뺄셈 등의 연산을 할 때는 부호 있는 정수로 변환하거나 조건문으로 음수 결과를 방지해야 합니다. 라고 수정될 예정입니다. 감사합니다.ㅎㅎ 2번 아닙니다. 예시 코드에서 v3 변수는 1차원 벡터로 선언되었음을 확인할 수 있었습니다.-> 저 배열은 벡터 10개를 원소로 가지는 배열 이자 2차원 벡터처럼 쓸 수 있지만 실제로는 정적 배열 형태를 띈 배열이라고 볼 수 있습니다. 감사합니다.
- 0
- 1
- 16
질문&답변
코드 질문있습니다.
안녕하세요 ㅎㅎ죄송하지만 강의내의 문제 이외의 문제에 대한 답변은 드리지 않습니다. 감사합니다.
- 0
- 2
- 16
질문&답변
코테 일주일 남은 경우 복습법
크흠...매우 어려운 질문이네요 ㅠ혹시 어떤 회사인가요? 여기에 답변하기 어려우시면 zagabi@aviss.kr로 보내주세용
- 0
- 2
- 30
질문&답변
제 알고리즘 틀린 부분
안녕하세요 용근님 ㅎㅎ보통 트리 구조에서는 부모 노드가 먼저 나오고, 번호도 부모부터 매기는 경우를 많이 봤습니다. 그리고 예제 입력도 그런 형태로 주어져서, 부모 노드가 자식 노드보다 먼저 입력된다는 전제로 코드를 작성했습니다.이 부분이 잘못된 부분이 맞을까요?-> 네 맞습니다. 부모가 뒤에서 처음 등장하고 자식이 앞쪽에 있는 경우, 손자·증손자처럼 깊이가 2 이상인 경우, 자손을 일부 놓치게 됩니다. 또, 이런 상황이 발생하지 않도록 하려면 어떤 식으로 코드를 짜는 게 좋을지도 궁금합니다.-> 문제를 푸실 때 문제설명을 기반으로 풀어야 합니다. (문제에서 부모 노드가 자식 노드보다 먼저 입력된다는 전제가 있지 않은데 그걸기반으로 생각x) + 그렇게 해서 로직을 구축했다면 -> 반례들을 생각하면서 풀면 됩니다. (반례는 문제 범위의 최소, 최대를 중점을 생각하는게 좋습니다. 예를 들어 최소가 0이고 최대가 10만이라면 입력값에 0이나 10만을 넣어보면서 코드를 돌려보며 -> 틀린지 안틀린지를 확인해야 합니다.) 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 25
질문&답변
3-I 질문있습니다.
ㅎㅎㅎ다행입니다.
- 0
- 2
- 18
질문&답변
44강 질문
안녕하세요 Blaire님ㅎㅎXOR 기반 이진 나눗셈(XOR-based binary division)은 이진수에서 나눗셈을 할 때 ‘뺄셈’ 대신 XOR 연산을 이용하는 방식을 의미합니다. 예를 들어 다음과 같은 이진 나눗셈을 생각해봅시다:피제수(dividend): 110101 제수(divisor): 1011 보통 나눗셈처럼 제수를 왼쪽에서부터 피제수에 맞춰 “뺄셈”을 해 나갑니다.하지만 이때 뺄셈을 XOR 연산으로 처리하는 것이죠.피제수: 110101 제수: 1011 (길이 4) 피제수의 상위 4비트(1101)를 제수와 XOR1101 ⊕ 1011 = 0110 => 결과: 0110 (앞의 0은 버리고 나머지 자리로 이동)남은 피제수 비트 붙이기:0110 + 다음비트(0) = 1100 다시 제수(1011)와 XOR1100 ⊕ 1011 = 0111 남은 피제수 비트 붙이기:0111 + 다음비트(1) = 1111 다시 제수와 XOR1111 ⊕ 1011 = 0100 끝났을 때 나머지(remainder) 가 0100, 즉 4가 됩니다.이를 XOR 기반 이진 나눗셈이라고 합니다. CRC에서는전송할 데이터 → 다항식 형태로 변환CRC 생성 다항식(예: 10011)으로 XOR 나눗셈 수행나머지(remainder) 가 CRC 체크섬으로 사용됩니다전송 시에는 데이터 뒤에 CRC를 붙이고,수신 측에서는 다시 같은 XOR 나눗셈을 수행해서나머지가 0이면 오류 없음, 0이 아니면 오류 발생으로 판정합니다. 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 26
질문&답변
3-G 질문 있습니다.
안녕하세요 ㅎㅎ for(int i=0; i=0 && nx 이부분 때문에 그렇습니다. 배열 자체는 MAX - 1까지 참조가능한데 MAX까지 참조하게 만들어서 그렇습니다. 이부분을 고쳐보시겠어요? 감사합니다.
- 0
- 2
- 17
질문&답변
3-K 질문있습니다.
안녕하세요 원재님 ㅎㅎ네 맞습니다. 이문제는 정말 시간초과가 빡센 문제라서... 하나라도 비효율적인 코드가 있으면 안됩니다. while(true) { memset(visited, 0, sizeof(visited)); dfs(swanList[0].first, swanList[0].second, 1);이부분이 비효율적이여서 시간초과가 나는 것 같습니다. 매번 초기화를 진행하지 말고 -> 진행한 visited 시점에서 초기화를 진행하지말고 그 시점에서 나아가면서 차곡차곡 visited를 채우는 식으로 진행하게 해주세요 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- 0
- 2
- 17
질문&답변
7-J 질문드립니다.
제가 한번 DP로 만들어볼까요? 혼자 해보시다가 안될 때 이 코드 참고해주세요 ㅎㅎ 감사합니다.#include using namespace std; int n, k; int weight[100], value[100]; int answer = -1; int dp[101][100001]; void recur(int idx, int w, int cost){ if (w = cost) return; dp[idx][w] = cost; recur(idx + 1, w - weight[idx], cost + value[idx]); recur(idx + 1, w, cost); } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> k; for (int i = 0; i > weight[i] >> value[i]; memset(dp, -1, sizeof(dp)); recur(0, k, 0); cout
- 0
- 3
- 22
질문&답변
7-J 질문드립니다.
안녕하세요 ㅎㅎ if(idx == n){ answer = max(answer, cost); return; } recur(idx+1, w-weight[idx], cost+value[idx]); recur(idx+1, w, cost);이거는 근데 dp 가 아예 적용이 안되어있고 + n 이 100까지라서 2^100에 해당하는 시간복잡도라서 안되는 것 같아요 for(int i = 0; i = weight[i]; j--) dp[j] = max(dp[j], dp[j-weight[i]] + value[i]);이거는 반복문 + DP이기 때문에 통과되는 것입니다. 메모이제이션이 들어가기 때문에 그렇습니당. 재귀로 풀 때는 다르게 접근해야할까요..?-> 이거를 DP로 만드시면 됩니다. 감사합니다.
- 0
- 3
- 22