diff --git a/week05/hyejun.md b/week05/hyejun.md new file mode 100644 index 0000000..e073213 --- /dev/null +++ b/week05/hyejun.md @@ -0,0 +1,95 @@ +> [!NOTE] +> 이 파일을 복사해서 `week0N/{영문이름}.md`로 저장한 뒤 작성해주세요. +> AI나 블로그 풀이를 그대로 복사하지 않고 본인의 언어로 정리해주세요. + +# N주차 문제 풀이 인증 + +## 기본 정보 + +- 이름: 구혜준 +- 목표 문제 수: 3 +- 실제 풀이 문제 수: 3 + +--- + +# 오답노트 + +## 문제 1 + +- **문제명:** 멀리 뛰기 +- **문제 링크:** https://school.programmers.co.kr/learn/courses/30/lessons/12914 +- **알고리즘 / 자료구조:** 동적 계획법 + +### 접근 및 시행착오 + +각 칸에 도착하는 방법을 직접 나열하려 했지만, n이 커지면 경우의 수가 빠르게 늘어나 계산하기 어렵다. 마지막에 1칸을 뛰거나 2칸을 뛰는 두 경우로 나누어 생각했다. + +### 최종 풀이 + +n번째 칸에 도착하려면 n-1번째 칸에서 1칸을 뛰거나, n-2번째 칸에서 2칸을 뛰어야 한다. 따라서 이전 두 칸의 경우의 수를 더해 현재 값을 구했다. 계산할 때마다 1234567로 나눈 나머지를 저장했다. + +### 복잡도 + +- 시간복잡도: O(n) +- 공간복잡도: O(n) + +### 핵심 포인트 + +현재 경우의 수를 이전에 계산한 결과로 구할 수 있다면 동적 계획법을 생각해 볼 수 있다. + +--- + +## 문제 2 + +- **문제명:** 점프와 순간 이동 +- **문제 링크:** https://school.programmers.co.kr/learn/courses/30/lessons/12980 +- **알고리즘 / 자료구조:** 그리디, 이진수 + +### 접근 및 시행착오 +0부터 출발하는 방법을 생각하니 점프와 순간이동 순서를 정하기 어려웠다. 반대로 목적지에서 0으로 이동한다고 생각하니 필요한 연산이 명확해졌다. + + +### 최종 풀이 +현재 거리가 짝수이면 순간이동으로 온 것이므로 2로 나눈다. 홀수이면 점프로 1칸 이동한 것이므로 건전지 사용량을 1 증가시키고 1을 뺀다. 이 과정을 거리가 0이 될 때까지 반복했다. + + +### 복잡도 + +- 시간복잡도: O(log n) +- 공간복잡도: O(1) + +### 핵심 포인트 +정방향 풀이가 복잡할 때는 도착점에서 출발점으로 거꾸로 계산해 보는 것도 방법이라는 사실을 배웠다. + + +--- + +## 문제 3 + +- **문제명:** N개의 최소공배수 +- **문제 링크:** https://school.programmers.co.kr/learn/courses/30/lessons/12953 +- **알고리즘 / 자료구조:** 유클리드 호제법 + +### 접근 및 시행착오 +모든 수의 배수를 직접 확인하면 불필요한 계산이 많아진다. 두 수의 최소공배수를 차례대로 구하면 여러 수에도 같은 방식을 적용할 수 있다고 생각했다. + + +### 최종 풀이 +유클리드 호제법으로 두 수의 최대공약수를 구한 뒤, 두 수의 곱 ÷ 최대공약수로 최소공배수를 계산했다. 배열의 앞에서부터 현재 최소공배수와 다음 수의 최소공배수를 반복해서 구했다. + + +### 복잡도 + +- 시간복잡도: O(n log M) +- 공간복잡도: O(1) + +### 핵심 포인트 +여러 수의 최소공배수는 두 수씩 차례대로 합쳐서 구할 수 있다. + + +--- + +# 다음 주 목표 + +- 목표 문제 수: 3 +- 집중할 유형: 완전탐색 / 백트래킹 / 시뮬레이션 1 \ No newline at end of file