From f0920ea70b827fd6624e9f4fcca241123ab40309 Mon Sep 17 00:00:00 2001 From: ddhi7 Date: Sun, 20 Sep 2026 23:27:47 +0900 Subject: [PATCH] week10 --- week10/donghee.md | 116 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 week10/donghee.md diff --git a/week10/donghee.md b/week10/donghee.md new file mode 100644 index 0000000..7ed16c2 --- /dev/null +++ b/week10/donghee.md @@ -0,0 +1,116 @@ +# 10주차 문제 풀이 인증 + +## 기본 정보 + +* 이름: 원동희 +* 목표 문제 수: 3 +* 실제 풀이 문제 수: 3 + +--- + +# 오답노트 + +## 문제 1 + +* **문제명:** 완주하지 못한 선수 +* **문제 링크:** https://school.programmers.co.kr/learn/courses/30/lessons/42576 +* **알고리즘 / 자료구조:** 해시(HashMap) + +### 접근 및 시행착오 + +처음에는 participant와 completion 배열을 하나씩 비교하면서 완주하지 못한 선수를 찾으려고 했다. + +하지만 참가자 중에는 동명이인이 있을 수 있기 때문에 단순히 이름의 존재 여부만 확인하면 정확하게 처리할 수 없었다. + +따라서 참가자의 이름별 등장 횟수를 저장해야 한다고 생각했고, HashMap을 사용해 각 이름의 인원수를 관리하는 방식으로 변경했다. + +### 최종 풀이 + +1. participant 배열을 순회하면서 HashMap에 선수 이름과 등장 횟수를 저장한다. +2. completion 배열을 순회하면서 해당 선수의 등장 횟수를 1씩 감소시킨다. +3. 최종적으로 등장 횟수가 1 남아 있는 선수를 찾는다. +4. 해당 선수가 완주하지 못한 선수이다. + +### 복잡도 + +* 시간복잡도: O(N) +* 공간복잡도: O(N) + +### 핵심 포인트 + +중복 데이터가 존재하면서 각 값의 개수를 비교해야 하는 문제에서는 HashMap을 이용해 빈도수를 저장하는 방법을 생각해볼 수 있다. + +--- + +## 문제 2 + +* **문제명:** K번째수 +* **문제 링크:** https://school.programmers.co.kr/learn/courses/30/lessons/42748 +* **알고리즘 / 자료구조:** 배열 / 정렬 + +### 접근 및 시행착오 + +처음에는 인덱스가 0부터 시작한다는 점 때문에 문제에서 주어진 i번째부터 j번째까지의 범위를 코드의 인덱스로 변환하는 부분이 헷갈렸다. + +문제의 i, j, k는 모두 1부터 시작하지만 배열의 인덱스는 0부터 시작하기 때문에 범위를 잘못 지정하면 원하는 값과 다른 결과가 나왔다. + +각 command마다 배열의 필요한 부분만 잘라낸 후 정렬하는 방식으로 접근했다. + +### 최종 풀이 + +1. commands를 하나씩 순회한다. +2. 각 command에서 i, j, k 값을 가져온다. +3. array의 i번째부터 j번째까지 잘라 새로운 배열을 만든다. +4. 잘라낸 배열을 오름차순으로 정렬한다. +5. 정렬된 배열의 k번째 값을 결과 배열에 추가한다. +6. 모든 command를 처리한 결과를 반환한다. + +### 복잡도 + +* 시간복잡도: O(M × N log N) +* 공간복잡도: O(N) + +### 핵심 포인트 + +문제에서 사용하는 순서가 1부터 시작하는지, 실제 배열의 인덱스가 0부터 시작하는지를 잘 구분해야 한다. + +--- + +## 문제 3 + +* **문제명:** 같은 숫자는 싫어 +* **문제 링크:** https://school.programmers.co.kr/learn/courses/30/lessons/12906 +* **알고리즘 / 자료구조:** 배열 / 스택 + +### 접근 및 시행착오 + +처음에는 Set을 사용하면 중복 숫자를 쉽게 제거할 수 있다고 생각했다. + +하지만 이 문제는 모든 중복을 제거하는 것이 아니라 **연속해서 나타나는 같은 숫자만 제거해야 하는 문제**였다. + +예를 들어 `[1, 2, 1]`에서는 마지막 1을 제거하면 안 되기 때문에 Set으로는 해결할 수 없었다. + +따라서 현재 숫자와 직전에 저장한 숫자를 비교하는 방식으로 접근했다. + +### 최종 풀이 + +1. arr 배열을 처음부터 순회한다. +2. 결과 배열이 비어 있거나, 마지막으로 저장된 값과 현재 값이 다른 경우에만 현재 값을 추가한다. +3. 마지막 값과 현재 값이 같다면 추가하지 않고 넘어간다. +4. 모든 원소를 확인한 뒤 결과 배열을 반환한다. + +### 복잡도 + +* 시간복잡도: O(N) +* 공간복잡도: O(N) + +### 핵심 포인트 + +중복 제거라고 다 Set을 사용해야한다는 생각 버리기! + +--- + +# 다음 주 목표 + +* 목표 문제 수: 3 +* 집중할 유형: