Skip to content

[haung921209] Week 05 Solutions #1388

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions best-time-to-buy-and-sell-stock/haung921209.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 연관 링크
- [문제 풀이 스케줄](https://github.com/orgs/DaleStudy/projects/6/views/5)
- [답안 코드 제출법](https://github.com/DaleStudy/leetcode-study/wiki/%EB%8B%B5%EC%95%88-%EC%A0%9C%EC%B6%9C-%EA%B0%80%EC%9D%B4%EB%93%9C)

# Problem
- 문제 링크 : https://leetcode.com/problems/best-time-to-buy-and-sell-stock/
- 문제 이름 : Best Time to Buy and Sell Stock
- 문제 번호 : 121
- 난이도 : easy
- 카테고리 :

# 문제 설명


# 아이디어
- 어떤 방법으로 접근했는지 서술
- 포스 vs 최적화 아이디어 차이 등
- 잡도에 대한 고려

# ✅ 코드 (Solution)

```cpp
class Solution {
public:
int maxProfit(vector<int>& prices) {
int localMax = prices[prices.size()-1];
int res = 0;
for(int i=prices.size()-2;i>=0;i--){
localMax = max(localMax, prices[i]);
res = max(res, localMax-prices[i]);
}

return res;
}
};
```

# 🔍 코드 설명

- local max를 설정

# 최적화 포인트 (Optimality Discussion)
• 최적화한 이유와 원리
• 더 줄일 수 있는 여지는 있는가?
• 기존 방법 대비 얼마나 효율적이었는지

# 🧪 테스트 & 엣지 케이스

# 📚 관련 지식 복습

# 🔁 회고


36 changes: 36 additions & 0 deletions encode-and-decode-strings/haung921209.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 연관 링크
- [문제 풀이 스케줄](https://github.com/orgs/DaleStudy/projects/6/views/5)
- [답안 코드 제출법](https://github.com/DaleStudy/leetcode-study/wiki/%EB%8B%B5%EC%95%88-%EC%A0%9C%EC%B6%9C-%EA%B0%80%EC%9D%B4%EB%93%9C)

# Problem
- 문제 링크 :
- 문제 이름 :
- 문제 번호 :
- 난이도 :
- 카테고리 :

# 문제 설명


# 아이디어
- 어떤 방법으로 접근했는지 서술
- 포스 vs 최적화 아이디어 차이 등
- 잡도에 대한 고려

# ✅ 코드 (Solution)

# 🔍 코드 설명


# 최적화 포인트 (Optimality Discussion)
• 최적화한 이유와 원리
• 더 줄일 수 있는 여지는 있는가?
• 기존 방법 대비 얼마나 효율적이었는지

# 🧪 테스트 & 엣지 케이스

# 📚 관련 지식 복습

# 🔁 회고


60 changes: 60 additions & 0 deletions group-anagrams/haung921209.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 연관 링크
- [문제 풀이 스케줄](https://github.com/orgs/DaleStudy/projects/6/views/5)
- [답안 코드 제출법](https://github.com/DaleStudy/leetcode-study/wiki/%EB%8B%B5%EC%95%88-%EC%A0%9C%EC%B6%9C-%EA%B0%80%EC%9D%B4%EB%93%9C)

# Problem
- 문제 링크 : https://leetcode.com/problems/group-anagrams/description/
- 문제 이름 : Group Anagrams
- 문제 번호 : 49
- 난이도 : medium
- 카테고리 :

# 문제 설명


# 아이디어
- string을 정렬 -> key로 사용 가능
- 정렬을 이용해 서로 다른 permutation(anagram)들을 같은 그룹으로 묶음.
- unordered_map을 사용해서 key lookup이 평균적으로 **O(1)**에 가능하므로 전체 알고리즘은 매우 효율적임.

# ✅ 코드 (Solution)
```
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
unordered_map<string, vector<string>> um;
for(auto str: strs){
string key= str;
sort(key.begin(), key.end());
um[key].push_back(str);
}
for(auto vec = um.begin();vec != um.end(); vec++){
res.push_back(vec->second);
}
return res;
}
};

```
# 🔍 코드 설명
- length가 10^4 이하 + sort -> input 상 상수 시간 내 처리 가능
- 정렬을 이용해 서로 다른 permutation(anagram)들을 같은 그룹으로 묶음.
- unordered_map을 사용해서 key lookup이 평균적으로 **O(1)**에 가능하므로 전체 알고리즘은 매우 효율적임.
-

# 최적화 포인트 (Optimality Discussion)
- 불필요한 문자열 복사 방지:
- for(auto& str : strs) 처럼 auto 뒤에 &(레퍼런스) 를 사용하면, str을 복사하지 않고 참조로 받아 메모리 사용을 줄일 수 있음.
- key string 생성 비용 줄이기:
- 문자열을 매번 정렬하면 O(K log K) (K는 문자열 길이) 비용이 듦.
- 만약 모든 입력 문자열이 영어 소문자(a~z)로 제한된다면, 26개 알파벳의 빈도수 배열을 사용해서 O(K)로 key를 만들 수도 있음.
- 이 경우 정렬이 아니라 counting 기반 key 생성.

# 🧪 테스트 & 엣지 케이스

# 📚 관련 지식 복습

# 🔁 회고


36 changes: 36 additions & 0 deletions implement-trie-prefix-tree/haung921209.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 연관 링크
- [문제 풀이 스케줄](https://github.com/orgs/DaleStudy/projects/6/views/5)
- [답안 코드 제출법](https://github.com/DaleStudy/leetcode-study/wiki/%EB%8B%B5%EC%95%88-%EC%A0%9C%EC%B6%9C-%EA%B0%80%EC%9D%B4%EB%93%9C)

# Problem
- 문제 링크 :
- 문제 이름 :
- 문제 번호 :
- 난이도 :
- 카테고리 :

# 문제 설명


# 아이디어
- 어떤 방법으로 접근했는지 서술
- 포스 vs 최적화 아이디어 차이 등
- 잡도에 대한 고려

# ✅ 코드 (Solution)

# 🔍 코드 설명


# 최적화 포인트 (Optimality Discussion)
• 최적화한 이유와 원리
• 더 줄일 수 있는 여지는 있는가?
• 기존 방법 대비 얼마나 효율적이었는지

# 🧪 테스트 & 엣지 케이스

# 📚 관련 지식 복습

# 🔁 회고


36 changes: 36 additions & 0 deletions word-break/haung921209.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 연관 링크
- [문제 풀이 스케줄](https://github.com/orgs/DaleStudy/projects/6/views/5)
- [답안 코드 제출법](https://github.com/DaleStudy/leetcode-study/wiki/%EB%8B%B5%EC%95%88-%EC%A0%9C%EC%B6%9C-%EA%B0%80%EC%9D%B4%EB%93%9C)

# Problem
- 문제 링크 :
- 문제 이름 :
- 문제 번호 :
- 난이도 :
- 카테고리 :

# 문제 설명


# 아이디어
- 어떤 방법으로 접근했는지 서술
- 포스 vs 최적화 아이디어 차이 등
- 잡도에 대한 고려

# ✅ 코드 (Solution)

# 🔍 코드 설명


# 최적화 포인트 (Optimality Discussion)
• 최적화한 이유와 원리
• 더 줄일 수 있는 여지는 있는가?
• 기존 방법 대비 얼마나 효율적이었는지

# 🧪 테스트 & 엣지 케이스

# 📚 관련 지식 복습

# 🔁 회고