게시글
질문&답변
list1.append(list2)와 list1.append(list2[:])의 차이가 무엇인가요?
안녕하세요, 나상민님문제의 핵심은 얕은 복사와 참조의 차이입니다.• result.append(curr)를 사용하면, curr 리스트의 참조를 결과 리스트에 저장합니다.따라서, 백트래킹 과정에서 curr의 내용이 바뀔 때마다 이미 추가된 모든 항목도 같이 변합니다.• 반면에, result.append(curr[:])는 curr의 얕은 복사본을 만들어 저장합니다.이렇게 하면 그 시점의 curr 값이 보존되어, 이후에 curr가 변경되더라도 복사본은 그대로 유지됩니다.main 함수에서 test2와 test2[:]를 비교했을 때는, 둘 다 한 번만 추가되기 때문에 출력 결과가 같지만, 백트래킹처럼 curr을 여러 번 수정하는 경우에는 복사본을 만들어 저장해야 올바른 결과를 얻을 수 있습니다. test1에 추가를 다 하신 후에 test2 배열의 원소를 수정한 후 test1을 출력하면 차이점을 이해하시게 될 겁니다. 즉, 백트래킹에서는 재귀 호출 후 curr.pop()으로 원소를 제거하면서 curr의 상태가 계속 바뀌므로, 현재 상태를 보존하려면 반드시 복사본(curr[:])을 추가해야 합니다.
- 1
- 1
- 14
질문&답변
라이브러리 사용
안녕하세요, CI1717177님.네, 맞습니다. 단순히 ‘중복 없이 값이 존재하는지’만 확인하는 경우라면 set이 훨씬 간단하고 직관적일 수 있습니다. 하지만 본 강의에서는 hash table이 무엇이고, 어떻게 쓰고, 어떤 상황에서 활용할 수 있는지 보여드리는 것이 주요 목적이었기 때문에 가장 기본기인 dictionary를 사용한 것이라고 생각하시면 됩니다. itertools 사용에 대하여 코딩테스트에서 별도 제약이 없다면 활용하셔도 문제 없습니다. 다만, 일부 기업이나 시험 환경에 따라 외부 라이브러리를 제한하거나, 문제 해결 과정을 직접 구현하는 능력을 보고 싶어 할 수 있습니다. 따라서 백트래킹을 손수 구현하는 방식도 충분히 연습해 두는 것이 좋습니다. 백트래킹이 필요한 다른 문제 유형N-QueensSudoku Solve 순열/조합 외에도, 부분집합이나 특정 조건(예: 유효한 괄호 문자열 생성) 등이 포함된 문제 DFS/BFS와의 결합: 그래프나 트리에서 경로를 찾을 때, 조건에 따라 백트래킹이 들어갈 수도 있습니다.답변이 되었길 바랍니다.감사합니다.
- 0
- 2
- 14
질문&답변
문제 교재는 따로 없는 거 맞나요?
안녕하세요, 나상민님. 질문주신 문제는 교재에 내용이 있습니다. (문제 풀이 섹션 -> Two sum)다만, 말씀하신대로 문제의 내용 확인과 풀이는 강의 하단 혹은 교재에 있는 링크를 통해 진행해주셔야 합니다. 감사합니다.
- 1
- 2
- 26
질문&답변
LCA 관련해서 질문이 있습니다.
안녕하세요, 김도현님.해당 강의에서의 left, right는 방문표시를 위한 것이기 보다는 자식 노드를 탐색한 것에 대한 결과라고 생각하시면 됩니다.자식 노드의 값을 얻어오기 위해서는 다시 자식노드의 자식노드를 탐색하는 재귀적인 과정을 거칩니다. 재귀라는 개념이 다소 복잡할 수 있는 내용입니다. 따라서 강의를 다시 들어보시고 코드도 작성해보시면서 곰곰히 생각해보시는 것을 권장합니다. 감사합니다.
- 1
- 2
- 20
질문&답변
[Unique Paths] 완전탐색 / DP (후반부)
안녕하세요. zzzzz님. 1. 첫 번째 행의 경우시작점 (0,0)에서 첫 번째 행의 다른 칸 (0, j)으로 가려면 오른쪽으로만 이동할 수 있습니다.오른쪽으로만 이동하는 경우, 선택의 여지가 없으므로 경로는 유일하게 1가지입니다.따라서 dp[0][j] = 1 (모든 j)가 됩니다.2. 첫 번째 열의 경우마찬가지로, (0,0)에서 첫 번째 열의 다른 칸 (i, 0)으로 가려면 아래로만 이동할 수 있습니다.아래로만 이동하면 역시 경로는 1가지입니다.따라서 dp[i][0] = 1 (모든 i)가 됩니다.3. 나머지 셀의 경우임의의 셀 (i, j)에 도달하는 경로의 수는, 바로 위 (i-1, j)에서 오는 경로의 수와 왼쪽 (i, j-1)에서 오는 경로의 수의 합입니다.즉, dp[i][j] = dp[i-1][j] + dp[i][j-1]가 됩니다. 이 문제의 핵심은 셀에 도달할 수 있는 모든 경우의 수를 구하는 것입니다. 직접 그림을 그리면서 생각해보시면 이해가 잘 되실 겁니다. 추가적인 질문이 있다면 편하게 질문 바랍니다.감사합니다.
- 0
- 1
- 38
질문&답변
dp 계단오르기최소비용질문입니다.
안녕하세요. zzzzz님.질문주신 두 문제 Climbing Stairs와 Min Cost Climbing Stairs는 비슷하지만 문제 요구사항에 있어 차이가 있습니다. Climbing Stairs의 경우 목표와 점화식은 다음과 같습니다.목표: 각 계단에 도달할 수 있는 “방법의 수”를 구하는 것.점화식: memo[i] = memo[i-1] + memo[i-2] 여기서, memo[i]는 i번째 계단에 도달하는 데 가능한 모든 경로의 “개수”를 저장합니다.계단을 밟는 행위 자체에 추가 비용이나 값이 없으므로, 단순히 이전 계단들의 방법의 수를 합산합니다. 반면 Min Cost Climbing Stairs는 이렇습니다.목표: 각 계단에 도달하는 데 드는 최소 비용을 구하는 것.점화식: memo[i] = min(memo[i-1], memo[i-2]) + cost[i] 여기서 memo[i]는 i번째 계단까지 도달하는 총 비용을 저장합니다. 그럼 왜 cost[i]를 더해야 할까요? i번째 계단에 도달할 때 반드시 cost[i] 만큼의 비용을 지불해야 하기 때문입니다.즉, i번째 계단을 밟는 행위 자체가 비용을 발생시킵니다.따라서 이전 계단까지 도달하는 데 드는 최소 비용(즉, memo[i-1] 혹은 memo[i-2])에 현재 계단의 비용 cost[i]를 더해주어야 i번째 계단까지의 총 비용이 계산됩니다. 어떤 계단에 도달하는 비용을 누적해야 하므로, 계단마다 발생하는 추가 비용인 cost[i]를 반드시 포함시켜야 합니다. 반면 Climbing Stairs에서는 어떤 계단에 도달하는 경우의 수만 기록하면 되므로, 계단을 밟는 행위에 별도의 값(비용)을 더할 필요가 없습니다. 단순히 해당 위치에 도달할 수 있는 경우의 수를 구하는 것이 전부입니다. 추가적인 질문이 있다면 편하게 남겨주시기 바랍니다.감사합니다.
- 0
- 1
- 35
질문&답변
노션공유가 안된듯 합니다
안녕하세요, 랑프님. 방금 노션 공유 드렸습니다.공유는 요청 후 24시간 이내에 이루어지며, 이 과정에서 약간의 지연이 발생할 수 있습니다.감사합니다.
- 1
- 2
- 72
질문&답변
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)
안녕하세요. zzzzz님 강의에서 언급된 10^6은 모든 방의 키 개수의 합을 의미합니다.각 방에 존재할 수 있는 키의 최대 개수는 10^3입니다. (0 10^3입니다. (2 물론, 문제에 1 이해가 안되는 부분이 있다면 언제든 질문 바랍니다.감사합니다.
- 1
- 1
- 43
질문&답변
강의자료 만들 때 사용하신 프로그램이 뭘까요?
안녕하세요. 코드 에디터는 vscode, 교재는 노션, 시각 자료는 keynote를 사용합니다. 감사합니다.
- 1
- 1
- 76
질문&답변
강의 처음부터 보고있는데 질문있습니다.
안녕하세요, happy_kaiser님질문주신 내용은 디버깅 모드에 대한 것으로 판단됩니다. 코드를 한 줄씩 실행하려면 디버깅 모드를 사용하면 됩니다. IDE(예: PyCharm, VSCode 등)에서 브레이크 포인트를 설정한 후 디버깅 모드로 실행하면, 브레이크 포인트마다 멈출 수 있고 그때의 변수 상태도 확인할 수 있습니다. (사진)디버깅을 하고 싶은 코드 왼쪽에 마우스를 가져다대면, 빨간 동그라미(IDE마다 다를 수 있습니다.)가 나옵니다. 그 동그라미를 누르면, 해당 코드가 브레이크 포인트로 설정됩니다. (사진)모든 브레이크 포인트를 설정하셨으면, 디버깅 모드로 실행하시면 됩니다. 자세한 내용은 'vscode(혹은 자신이 사용하는 IDE) 디버깅 모드' 를 검색해보시기 바랍니다. 감사합니다.
- 1
- 2
- 81