Skip to content

Commit 8d0f2c5

Browse files
authored
Merge pull request #92 from Invidam/week04-invidam
[Vidam, Invidam] Week 4 Solution
2 parents dc33916 + 2f63915 commit 8d0f2c5

File tree

4 files changed

+197
-0
lines changed

4 files changed

+197
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Intuition
2+
<!-- Describe your first thoughts on how to solve this problem. -->
3+
์ด์ „ ๊ฐ’๋“ค์„ ์žฌํ™œ์šฉํ•œ๋‹ค.
4+
# Approach
5+
<!-- Describe your approach to solving the problem. -->
6+
1. ์—ฃ์ง€ ์ผ€์ด์Šค๋Š” 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
7+
2. 0, 1์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ๋‹ค.
8+
3. `>>`์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ + ์ง/ํ™€ ์—ฌ๋ถ€๋กœ ์ธํ•œ 1์„ ๋”ํ•ด์„œ ํ•ด๊ฒฐํ•ด์ค€๋‹ค.
9+
- ์ด์ง„์ˆ˜ `1001`์˜ ๊ฒฝ์šฐ `100` ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ด๊ฐ’์—์„œ `1`์„ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
10+
- ์ด์ง„์ˆ˜ `1010`์˜ ๊ฒฝ์šฐ `101` ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ด๊ฐ’์—์„œ `0`์„ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
11+
12+
- ์†”๋ฃจ์…˜ ์ฐธ๊ณ : `i & (i-1)` ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ณ„์‚ฐํ•œ๋‹ค.
13+
- 2์˜ ์ œ๊ณฑ์ˆ˜์ธ ๊ฒฝ์šฐ `0`์ด ๋‚˜์™€ 1์„ ๋”ํ•˜๋ฉด ๋œ๋‹ค.
14+
- ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ์•„์ง์€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.
15+
# Complexity
16+
- Time complexity: $$O(n)$$
17+
<!-- Add your time complexity here, e.g. $$O(n)$$ -->
18+
:`n`ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ๋ชจ๋‘๋ฅผ ์ˆœํšŒํ•œ๋‹ค.
19+
- Space complexity: $$O(n)$$
20+
<!-- Add your space complexity here, e.g. $$O(n)$$ -->
21+
:ํฌ๊ธฐ `n`์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ๋‹ค.
22+
# Code
23+
```go
24+
func countBits(n int) []int {
25+
if n == 0 {
26+
return []int{0}
27+
}
28+
ans := make([]int, n+1, n+1)
29+
30+
ans[0], ans[1] = 0, 1
31+
32+
for i := 2; i <= n; i++ {
33+
ans[i] = ans[i>>1] + i&1
34+
}
35+
return ans
36+
}
37+
38+
func countBitsSolution(n int) []int {
39+
res := make([]int, n+1)
40+
for i := 1; i <= n; i++ {
41+
res[i] = res[i&(i-1)] + 1
42+
}
43+
return res
44+
}
45+
```
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Intuition
2+
์ •๋ ฌ๋œ ๋ฌธ์ž์—ด์„ ํ†ตํ•ด ๊ทธ๋ฃน ์—ฌ๋ถ€๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•œ๋‹ค.
3+
# Approach
4+
1. `{์ •๋ ฌ๋œ ๋ฌธ์ž์—ด, ๊ทธ ๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค}`๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ๋‹ค.
5+
2. ์›๋ณธ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ, ์ธ๋ฑ์Šค๋ฅผ struct๋กœ ํ•˜์—ฌ ๋ฐฐ์—ด์— ์‚ฝ์ž…ํ•œ๋‹ค.
6+
- ์ธ๋ฑ์Šค๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ด์œ ๋Š” ์›๋ณธ ๋ฐฐ์—ด์˜ ๋ฌธ์ž์—ด ๊ฐ’์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. (์ •๋ ฌ์„ ํ–ˆ๊ธฐ์— ์ด๋ ‡์ง€ ์•Š์œผ๋ฉด ํ™•์ธ์ด ์–ด๋ ต๋‹ค.)
7+
3. ๋ชจ๋“  struct๊ฐ€ ์‚ฝ์ž…๋œ ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
8+
4. ๋ฐ˜๋ณต๋ฌธ์„ ์ˆœํšŒํ•˜๋ฉฐ `์ด์ „ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€์ง€` ์—ฌ๋ถ€๋ฅผ ๊ทธ๋ฃน์„ ํŒ๋‹จํ•˜์—ฌ ์ธ๋ฑ์Šค๋“ค์„ ๊ทธ๋ฃจํ•‘ํ•ด ๋ชจ์•„๋†“๋Š”๋‹ค.
9+
5. ๊ทธ๋ฃจํ•‘ํ•œ ์ธ๋ฑ์Šค๋“ค์„ ๋ฌธ์ž์—ด(์›๋ณธ ๋ฌธ์ž์—ด์„ ์ฐธ์กฐํ•ด์„œ)๋กœ ์น˜ํ™˜ํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
10+
# Complexity
11+
- Time complexity: $$O(nklog(n))$$
12+
<!-- Add your time complexity here, e.g. $$O(nklog(n))$$ -->
13+
: ๋ฐฐ์—ด์˜ ๊ธธ์ด `n`, ๋ฌธ์ž์—ด์˜ ๊ธธ์ด `k`. ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋น„์šฉ์ด๋‹ค.
14+
- Space complexity: $$O(nk)$$
15+
16+
: ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ๊ธธ์ด `n`, ๋ฐฐ์—ด์ด ๊ฐ€์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด `k`, (์ฝ”๋“œ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด, ๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ ๋ชจ๋‘ `n`, `k`์ด๋‹ค.)
17+
<!-- Add your space complexity here, e.g. $$O(n)$$ -->
18+
19+
# Code
20+
```go
21+
type StrAndIdx struct {
22+
Str string
23+
Idx int
24+
}
25+
26+
func sortSring(s string) string {
27+
runes := []rune(s)
28+
29+
sort.Slice(runes, func(i, j int) bool {
30+
return runes[i] < runes[j]
31+
})
32+
33+
return string(runes)
34+
}
35+
36+
func groupAnagrams(strs []string) [][]string {
37+
38+
strAndIdxs := make([]StrAndIdx, 0, len(strs)+5)
39+
40+
for i, s := range strs {
41+
strAndIdxs = append(strAndIdxs, StrAndIdx{sortSring(s), i})
42+
}
43+
44+
sort.Slice(strAndIdxs, func(i, j int) bool {
45+
return strAndIdxs[i].Str < strAndIdxs[j].Str
46+
})
47+
48+
groupedIdxs := make([][]int, 0, len(strAndIdxs)/4)
49+
50+
group := make([]int, 0)
51+
defaultString := "NOT_EXIST_STRING"
52+
prev := defaultString
53+
for _, sAI := range strAndIdxs {
54+
curr := sAI.Str
55+
idx := sAI.Idx
56+
if prev == curr {
57+
group = append(group, idx)
58+
} else {
59+
if prev != defaultString {
60+
groupedIdxs = append(groupedIdxs, group)
61+
}
62+
group = []int{idx}
63+
}
64+
prev = curr
65+
}
66+
67+
if len(group) != 0 {
68+
groupedIdxs = append(groupedIdxs, group)
69+
}
70+
71+
groupedStrs := make([][]string, 0, len(groupedIdxs))
72+
for _, idxs := range groupedIdxs {
73+
74+
groupStr := make([]string, 0, len(idxs))
75+
for _, idx := range idxs {
76+
groupStr = append(groupStr, strs[idx])
77+
}
78+
groupedStrs = append(groupedStrs, groupStr)
79+
}
80+
81+
return groupedStrs
82+
}
83+
```
84+
85+
# **To** Learn
86+
- GoLang์—์„œ ๋ฌธ์ž์—ด์„ ์–ด๋–ป๊ฒŒ ๋น„๊ตํ•˜๋Š”์ง€.
87+
- ํ•ด๋‹น ๋ฌธ์ œ ํ•ด๊ฒฐ์— ์žˆ์–ด์„œ ์‚ฝ์งˆํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ด์—ˆ๋Š”์ง€. ์•ž์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์•ˆํ•  ์ˆ˜ ์žˆ๋Š”์ง€.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Intuition
2+
<!-- Describe your first thoughts on how to solve this problem. -->
3+
๋ฐฐํƒ€์ ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฐธ์„ ์ถœ๋ ฅํ•˜๋Š” `XOR` ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•œ๋‹ค.
4+
# Approach
5+
<!-- Describe your approach to solving the problem. -->
6+
- ๋ฌธ์ œ๋ฅผ ์น˜ํ™˜ํ•ด๋ณด์ž. ๋ชจ๋“  ์ˆ˜๊ฐ€ 2๋ฒˆ์”ฉ ๋“ฑ์žฅํ•˜๊ณ , ํ•˜๋‚˜์˜ ์ˆ˜๋งŒ ํ•œ ๋ฒˆ ๋“ฑ์žฅํ•œ๋‹ค๊ณ  ํ•˜์ž.
7+
- ์ด ๊ฒฝ์šฐ, ๋ชจ๋“  ์ˆ˜๋“ค์— `^`์—ฐ์‚ฐ์„ ํ•˜๋ฉด ํ•œ ๋ฒˆ ๋“ฑ์žฅํ•œ ์ˆ˜๋งŒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
8+
- `๋ฐฐ์—ด์˜ ๊ธธ์ด` + `์ธ๋ฑ์Šค`์™€ `ํ•ด๋‹น ์ธ๋ฑ์Šค์ผ ๋•Œ์˜ ์›์†Œ๊ฐ’`๋“ค์„ ๋ชจ๋‘ `^`์—ฐ์‚ฐํ•˜๋ฉด
9+
- ๋ฐฐ์—ด + ์ธ๋ฑ์Šค ์ˆœํšŒ๋กœ ๋ชจ๋“  ์ˆ˜๋Š” 1๋ฒˆ์”ฉ ๋“ฑ์žฅํ•œ๋‹ค.
10+
- ์›์†Œ๊ฐ’ ์ˆœํšŒ๋กœ ํ•˜๋‚˜์˜ ์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณค 1๋ฒˆ์”ฉ ๋“ฑ์žฅํ•œ๋‹ค.
11+
- ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•œ ์ˆ˜๊ฐ€ missing number์ด๋‹ค.
12+
# Complexity
13+
- Time complexity: $$O(n)$$
14+
<!-- Add your time complexity here, e.g. $$O(n)$$ -->
15+
: ๋ฐฐ์—ด์˜ ๊ธธ์ด `n`, ์ด๋ฅผ ์ˆœํšŒํ•œ๋‹ค.
16+
- Space complexity: $$O(n)$$
17+
18+
: inline, ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ๊ธธ์ด `n`
19+
<!-- Add your space complexity here, e.g. $$O(n)$$ -->
20+
21+
# Code
22+
```go
23+
func missingNumber(nums []int) int {
24+
num := len(nums)
25+
26+
for i, n := range nums {
27+
num ^= i
28+
num ^= n
29+
}
30+
return num
31+
}
32+
```
33+
34+
# Today I Learned
35+
- ๋‹ค๋ฅธ ํ’€์ด๋กœ ํ’€ ๋•Œ, `abs()`๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•˜์˜€๋Š”๋ฐ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•˜๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ์ฐพ์•„๋ดค๋Š”๋ฐ ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ฒ ํ•™์— ์•ˆ๋งž๋Š”๋‹ค๊ณ  ์•ˆ๋„ฃ์–ด์ค€๋‹ค ํ•˜๋”๋ผ.
36+
- ์ฐธ๊ณ : https://go.dev/doc/faq#x_in_std
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Intuition
2+
๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•œ๋‹ค.
3+
# Approach
4+
1. `n`๊ณผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ `mask`๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
5+
2. `mask`๋ฅผ 2์ง„์ˆ˜ `1`, `10`, `100` ์ˆœ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚จ ํ›„ `&` ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด, n์˜ ํŠน์ • ๋น„ํŠธ๊ฐ€ `1`์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค.
6+
3. ์ฐธ์ธ ๊ฒฝ์šฐ `cnt`๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•œ๋‹ค.
7+
8+
# Complexity
9+
- Time complexity: $$O(logn)$$
10+
<!-- Add your time complexity here, e.g. $$O(n)$$ -->
11+
: `mask`๊ฐ€ ์žˆ๋Š” ๋ฐ˜๋ณต๋ฌธ์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค. `mask`๋Š” ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ `n`๊นŒ์ง€ 2๋ฐฐ์”ฉ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ $$O(logn)$$์ด๋‹ค.
12+
- Space complexity: $$O(1)$$
13+
<!-- Add your space complexity here, e.g. $$O(n)$$ -->
14+
: ๋ณ„๋„ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
15+
# Code
16+
```go
17+
func hammingWeight(n int) int {
18+
cnt := 0
19+
for mask := 1; mask <= n; mask = mask << 1 {
20+
if (mask & n) != 0 {
21+
cnt += 1
22+
}
23+
}
24+
return cnt
25+
}
26+
```
27+
28+
# What I learned
29+
- ๊ณ ์–ธ์–ด์—์„œ ์ฒซ ๋น„ํŠธ ์—ฐ์‚ฐ์ž ํ™œ์šฉ

0 commit comments

Comments
ย (0)