Skip to content

Commit 2399863

Browse files
authored
Merge pull request #667 from easyone-jwlee/main
[๋˜˜์น˜] Week1
2 parents 1d1797c + 0953f26 commit 2399863

File tree

5 files changed

+162
-0
lines changed

5 files changed

+162
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// ํ’€์ด
2+
// map์œผ๋กœ ์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์ฒดํฌ
3+
4+
// TC
5+
// ์ค‘๋ณต์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ์— ์ตœ๋Œ€ n๋ฒˆ ์กฐํšŒ
6+
// n๋ฒˆ ๋ฐ˜๋ณต์‹œ ์ด ์ž‘์—…์˜ ๋ณต์žก๋„๋Š” O(n)
7+
8+
// SC
9+
// n๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ €์žฅํ•˜๋ฉด map์ด ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์€ ์ตœ๋Œ€ O(n)
10+
11+
// (+) ์ •๋ ฌ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด?
12+
// ์ž…๋ ฅ๋œ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์„œ ์„œ๋กœ ์ธ์ ‘ํ•œ ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด O(1)์˜ SC๋กœ ์ค‘๋ณต ํ™•์ธ ๊ฐ€๋Šฅ.
13+
// ๊ทธ๋Ÿฌ๋‚˜ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋ฉด TC๊ฐ€ O(nlogn).
14+
15+
func containsDuplicate(nums []int) bool {
16+
m := make(map[int]int)
17+
for _, num := range nums {
18+
if _, ok := m[num]; ok {
19+
return true
20+
}
21+
m[num] = num
22+
}
23+
return false
24+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// ํ’€์ด
2+
// dp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ํ„ธ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ํ•œ์˜ ๋ˆ์„ ๊ณ„์‚ฐ
3+
// curr์ด prev๊ฐ€ ๋˜๊ณ , prev์˜€๋˜ ๊ฐ’์ด ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋”ํ•œ ๊ฒƒ๊ณผ curr ์ด์—ˆ๋˜ ๊ฐ’์˜ ์ตœ๋Œ€๊ฐ’์„ ๋น„๊ตํ•œ ๊ฒƒ์ด ์ƒˆ๋กœ์šด curr์ด ๋œ๋‹ค.
4+
// ๋งˆ์ง€๋ง‰์—” prev์™€ curr์˜ ์ตœ๋Œ€๊ฐ’์„ ๋น„๊ต
5+
// ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ„ธ ์ˆ˜ ์žˆ๋Š” ์ง‘์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ณ„์† ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋จ.
6+
7+
// TC
8+
// O(n)
9+
10+
// SC
11+
// ๋Š˜์–ด๋‚˜์ง€ ์•Š๋Š” int ๊ฐ’๋งŒ ์‚ฌ์šฉํ–ˆ์œผ๋ฏ€๋กœ O(1)
12+
13+
func rob(nums []int) int {
14+
length := len(nums)
15+
16+
if length == 1 {
17+
return nums[0]
18+
}
19+
20+
prev := 0
21+
curr := nums[0]
22+
23+
for i := 1; i < length; i++ {
24+
prev, curr = curr, max(nums[i]+prev, curr)
25+
}
26+
27+
return max(prev, curr)
28+
}
29+
30+
func max(a, b int) int {
31+
if a > b {
32+
return a
33+
} else {
34+
return b
35+
}
36+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// ํ’€์ด
2+
// You must write an algorithm that runs in O(n) time.
3+
// TC๋ฅผ O(n) ์ด๋‚ด๋กœ ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ sort๋ฅผ ์“ฐ์ง€ ๋ง๋ผ๋Š” ์˜๋ฏธ.
4+
// map์„ ์‚ฌ์šฉํ•˜๊ณ  ์ˆœํšŒํ•˜๋ฉฐ ์—ฐ์†์ด ์‹œ์ž‘๋˜๋Š” ๊ฐ’์„ ์ฐพ๊ณ  ์ฐพ์œผ๋ฉด ์—ฐ์†๋˜๋Š”์ง€ ์ฐพ๊ธฐ.
5+
6+
// TC
7+
// ์ˆœํšŒํ•˜๋Š” map์•ˆ์—์„œ for๋ฌธ์„ ๋˜ ํ˜ธ์ถœํ•˜๊ธด ํ•˜์ง€๋งŒ,
8+
// ๋ชจ๋“  ๊ฐ’์ด ์—ฐ์†๋˜๋Š” ๊ฐ’์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ
9+
// ์—ฐ์†์ด ์‹œ์ž‘๋˜๋Š” ๊ฐ’ ์™ธ์—๋Š” ํ•œ ๋ฒˆ์”ฉ ๋ฐ”๋กœ ์ง€๋‚˜๊ฐ€๊ฒŒ ๋˜๊ณ (n*1), ์‹œ์ž‘๋˜๋Š” ๊ฐ’๋ถ€ํ„ฐ ์—ฐ์†์ด ๋๋‚˜๋Š” ์‹œ์ ๊นŒ์ง€ n๋ฒˆ์ด๋ผ(1*n)
10+
// O(n+n) ์ด๊ธฐ ๋•Œ๋ฌธ์— TC๋Š” O(n)
11+
12+
// SC
13+
// map์ด ์ตœ๋Œ€๋กœ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์€ O(n)
14+
15+
func longestConsecutive(nums []int) int {
16+
m := make(map[int]bool)
17+
for _, num := range nums {
18+
m[num] = true
19+
}
20+
length := 1
21+
maxLength := 0
22+
for k := range m {
23+
if _, ok := m[k-1]; !ok {
24+
i := 1
25+
for {
26+
if _, ok := m[k+i]; ok {
27+
length++
28+
i++
29+
} else {
30+
break
31+
}
32+
}
33+
if maxLength < length {
34+
maxLength = length
35+
}
36+
length = 1
37+
}
38+
}
39+
return maxLength
40+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// ํ’€์ด
2+
// map์œผ๋กœ ์ž…๋ ฅ ์ˆซ์ž๋“ค์ด ๊ฐ๊ฐ ๋ช‡๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š”์ง€ ์ •๋ฆฌ
3+
// [][]int๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ฐ˜๋ณต๋œ ํšŸ์ˆ˜๋ฅผ index๋กœ, ์ž…๋ ฅ ์ˆซ์ž๊ฐ’์„ ๋ฐฐ์—ด์— appendํ•œ๋‹ค.
4+
// ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์„ ์—ญ์ˆœ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ k๊ฐœ์˜ element๋ฅผ ๊ฐ€์ง„ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
5+
6+
// TC
7+
// O(n)
8+
9+
// SC
10+
// ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•ด๋„ ๊ฐ ์ˆซ์ž๋Š” ํ•˜๋‚˜์˜ ํ•˜์œ„๋ฐฐ์—ด์—๋งŒ ์†ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ O(n)
11+
12+
func topKFrequent(nums []int, k int) []int {
13+
m := make(map[int]int)
14+
for _, num := range nums {
15+
m[num]++
16+
}
17+
a := make([][]int, len(nums)+1)
18+
for key, num := range m {
19+
a[num] = append(a[num], key)
20+
}
21+
result := make([]int, 0)
22+
for i := cap(a) - 1; i >= 0; i-- {
23+
if len(a[i]) > 0 {
24+
result = append(result, a[i]...)
25+
}
26+
if len(result) == k {
27+
break
28+
}
29+
}
30+
return result
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// ํ’€์ด
2+
// ์œ ํšจํ•œ string ๊ฐ’๋งŒ ์ •์ œํ•˜๊ณ  palindrome check.
3+
4+
// TC
5+
// ์ž…๋ ฅ๋œ string์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ์ตœ๋Œ€ O(n)
6+
7+
// SC
8+
// validStr์œผ๋กœ ์œ ํšจํ•œ string์„ ์ •์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ O(n)
9+
10+
// (+) ์ž…๋ ฅ๋œ string์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•˜๋ฉด SC๊ฐ€ O(1)
11+
12+
func isPalindrome(s string) bool {
13+
s = strings.ToLower(s)
14+
validStr := ""
15+
for _, str := range s {
16+
if ('a' > str || 'z' < str) && ('0' > str || '9' < str) {
17+
continue
18+
}
19+
validStr += string(str)
20+
}
21+
if len(validStr) <= 1 {
22+
return true
23+
}
24+
l := len(validStr)
25+
for i := 0; i < l/2; i++ {
26+
if validStr[i] != validStr[l-1-i] {
27+
return false
28+
}
29+
}
30+
return true
31+
}

0 commit comments

Comments
ย (0)