[๐คCode Kata] 2week-3
์๊ฐ์ ์ซ๊ธฐ๊ณ , ๋ญ๊ฐ ๊ผญ ์ ๋ต์ ์๊ฐํด ๋ด์ผ๋๋ค๋๊ฒ ์ข์๊ฒ ์๋๊ฑธ์๋๋ฐ.. ๋๋ ๋งค๋ฒ ์ ๋ต์ ๋ชป ๋ง์ถ๋ ๋ด๊ฐ ๋ฐ๋ณด๊ฐ๋ค๋ ์๊ดด๊ฐ์ด ๋ค๋๋ผ ใ ใ
-DAY4-
<๋ฌธ์ >
nums๋ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์
๋๋ค.
๊ฐ์ฅ ์์ฃผ ๋ฑ์ฅํ ์ซ์๋ฅผ k ๊ฐ์๋งํผ returnํด์ฃผ์ธ์.
์๋ฅผ ๋ค๋ฉด
nums = [1,1,1,2,2,3],k = 2
->return [1,2]
nums = [1],k = 1
->return [1]
์ ๊ทผ๋ฐฉ๋ฒ
<๋ฌธ์ >
nums๋ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์
๋๋ค.
๊ฐ์ฅ ์์ฃผ ๋ฑ์ฅํ ์ซ์๋ฅผ k ๊ฐ์๋งํผ returnํด์ฃผ์ธ์.
์๋ฅผ ๋ค๋ฉด
nums = [1,1,1,2,2,3],k = 2
->return [1,2]
nums = [1],k = 1
->return [1]
์ฒ์์ ๋๋ ๊ฐ ์๋ฅผ countํด์ ๊ฐ์ฅ ๋์ ์์์ธ ์ ๋ค์ k๋งํผ ๋ถ๋ฌ์ฌ๊น๋ผ๊ณ ์๊ฐ์ํ๋ค.
def top_k(nums, k):
dic = {}
for i in nums:
if i not in dic:
dic[i] = 1
else:
dic[i] += 1
์ฌ๊ธฐ์ ๋งํ๋ฒ๋ฆผ... ๊ฐ์ฅ ๋์ ์์๋ฅผ ๋ฝ์๋ด๋๊ฑธ ์ฐพ๋ค๊ฐ most_common๊ณผ Counterํจ์๊ฐ ์๋ค๋๊ฑธ ๋ฏผ์ฒ ๋ํํ ๋ฃ๊ณ ์ฌ์ฉํ๋ค.
from collections import Counter
def top_k(nums, k):
a = Counter(nums)
b = a.most_common(k)
c = []
for i in range(k):
c.append(b[i][0])
return c
๋ช๊ฐ์ง ์๋ก์ด ๊ฐ๋ ์ด ๋์์ ํ๋ฒ ์ ๋ฆฌํด ๋ณด๊ฒ ๋ค
<collections ๋ชจ๋ - Counter>
์ปจํ
์ด๋์ ๋์ผํ ๊ฐ์ ์๋ฃ๊ฐ ๋ช๊ฐ์ธ์ง ํ์
ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
<์
๋ ฅ๊ฐ>
1.๋ฆฌ์คํธ์ ์์๊ฐ์๋ฅผ collections.Counter()๋ฅผ ์ด์ฉํ๋ฉด Dictionaryํํ๋ก ๋ฐํํ๋ค.
import collections
lst = ['aa', 'cc', 'dd', 'aa', 'bb', 'ee']
print(collections.Counter(lst))
#๊ฒฐ๊ณผ
Counter({'aa': 2, 'cc': 1, 'dd': 1, 'bb': 1, 'ee': 1})
2.๋์ ๋๋ฆฌ์ ๊ฒฝ์ฐ ๋์ผํ๊ฒ ๋์ ๋๋ฆฌ ๊ทธ๋๋ก ๋ฐํ๋๋ฉฐ value์ ๊ฐ์ด ๋ง์ ๊ฒ ๋ถํฐ ์ถ๋ ฅํด์ค๋ค.
3."๊ฐ=๊ฐ์"ํํ๋ ์
๋ ฅ์ด ๊ฐ๋ฅํ๋ค. ์๋ฅผ๋ค์ด, collections.Counter(a=2, b=3, c=2)๋
['a', 'a', 'b', 'b', 'b', 'c', 'c']์ ๊ฐ๋ค.
๊ฒฐ๊ณผ๋{'b': 3, 'c': 2, 'a': 2}๋ก ๋์จ๋ค.
4.๋ฌธ์์ด(String)์ {๋ฌธ์:๊ฐ์}์ ๋์ ๋๋ฆฌ ํํ๋ก ๋ฐํ๋๋ค.
<most_common๋ฉ์๋>
๋ณดํต์ ๊ฒฝ์ฐ, ์ฃผ์ด์ง ๋จ์ด์์ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ๋ ์ํ๋ฒณ๊ณผ ๊ทธ ์ํ๋ฒณ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
from collections import Counter
def find_max(word):
counter = Counter(word)
max_count = -1
for letter in counter:
if counter[letter] > max_count:
max_count = counter[letter]
max_letter = letter
return max_letter, max_count
์ํ๋ฒณ์ ๊ฐ์๊ฐ ๋ง์ ์์๋๋ก ์ ๋ ฌํด ๋ฆฌํดํด์ฃผ๋ ํจ์๋ ์กด์ฌํ๋๋ฐ Counter์์ ํฌํจ์ด ๋์ด์๋ค(๊ฐ์ด๋๐)
from collections import Counter
Counter('hello world').most_common()
#๊ฒฐ๊ณผ๊ฐ
#[('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]
most_common()์ ()๊ดํธ์ ์ซ์๋ฅผ ๋ฃ์ผ๋ฉด ๊ทธ ์ซ์๋งํผ์ ๋ฐ์ดํฐ๋ง ๋ฝ์ ๋ผ ์๋ ์๋ค!
Solution
def top_k(nums, k):
count = {}
for n in nums:
count[n] = count.get(n, 0) + 1
bucket = [[] for _ in range(len(nums)+1)]
for n, freq in count.items():
bucket[freq].append(n)
ret = []
for n_list in bucket[::-1]:
if n_list:
ret.extend(n_list)
if len(ret) == k:
return ret
-DAY5-
<๋ฌธ์ >
์ธ์์ธ height๋ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์
๋๋ค.
๊ทธ๋ํ๋ก ์๊ฐํ๋ค๋ฉด y์ถ์ ๊ฐ์ด๊ณ , ๋์ด ๊ฐ์ ๊ฐ๊ณ ์์ต๋๋ค.
์๋์ ๊ทธ๋ํ๋ผ๋ฉด height ๋ฐฐ์ด์ [1, 8, 6, 2, 5, 4, 8, 3, 7] ์
๋๋ค.
์ ๊ทธ๋ํ์ ๋ฌผ์ ๋ด๋๋ค๊ณ ์๊ฐํ๊ณ ,
๋ฌผ์ ๋ด์ ์ ์๋ ๊ฐ์ฅ ๋์ ๋ฉด์ ์ ๊ฐ์ ๋ฐํํด์ฃผ์ธ์.
(๊ฐ์ : ๋ฐฐ์ด์ ๊ธธ์ด๋ 2์ด์์
๋๋ค.)
์ ๊ทผ๋ฐฉ๋ฒ
def top_k(nums, k):
count = {}
for n in nums:
count[n] = count.get(n, 0) + 1
bucket = [[] for _ in range(len(nums)+1)]
for n, freq in count.items():
bucket[freq].append(n)
ret = []
for n_list in bucket[::-1]:
if n_list:
ret.extend(n_list)
if len(ret) == k:
return ret
<๋ฌธ์ >
์ธ์์ธ height๋ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๋๋ค.
๊ทธ๋ํ๋ก ์๊ฐํ๋ค๋ฉด y์ถ์ ๊ฐ์ด๊ณ , ๋์ด ๊ฐ์ ๊ฐ๊ณ ์์ต๋๋ค.
์๋์ ๊ทธ๋ํ๋ผ๋ฉด height ๋ฐฐ์ด์ [1, 8, 6, 2, 5, 4, 8, 3, 7] ์ ๋๋ค.
์ ๊ทธ๋ํ์ ๋ฌผ์ ๋ด๋๋ค๊ณ ์๊ฐํ๊ณ ,
๋ฌผ์ ๋ด์ ์ ์๋ ๊ฐ์ฅ ๋์ ๋ฉด์ ์ ๊ฐ์ ๋ฐํํด์ฃผ์ธ์.
(๊ฐ์ : ๋ฐฐ์ด์ ๊ธธ์ด๋ 2์ด์์ ๋๋ค.)
์ ๊ทผ๋ฐฉ๋ฒ
๋ฌธ์ ๋ฅผ ๋ณธ ์๊ฐ์ ๋ : ?????????
๋๊ธฐ๋ ๊ณ ๋ง์ต๋๋ค..
์ง์ง.. ๋ฌธ์ ์ดํด๋ฅผ ๋ชปํด์ ์ ๊ทผ์ ๋ชปํ๋ ํ์ฃผ์๋ค ใ
ใ
๋๋ ๋ฐ๋ณด..ใ
ใ
ใ
def get_max_area(height):
answer=[]
for i in range(len(height)):
for j in range(i+1,len(height)):
square=(j-i)*min(height[i],height[j])
answer.append(square)
return max(answer)
๋จผ์ ๋น๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ๋์ด๋ฅผ ๊ตฌํ๊ธฐ์ํด for loop๋ฅผ ์ฌ์ฉํ๋ค. ๋ฉด์ ์ ๊ฒฝ์ฐ์ ์๋ณ๋ก ๋ค ๋ง๋ ๋ค list์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ค
์ด๋ฒ์๋ ์์ํ๊ฒ ์ฒ๋ฆฌํ๋๋ฐ!! ๋ชจ๋ฒ๋ต์์ ๋ณด๊ณ ์๋ก์ด ๊ฑธ ์๊ฐํด ๋ณผ ์ ์๊ฒ ๋์๋ค.
Solution
def get_max_area(height):
l = 0
r = len(height) -1
area = 0
while l < r:
area = max(area, min(height[l],height[r]) * (r - l))
if height[l] < height[r]:
l += 1
else:
r -= 1
return area
ํจ๊ป ๋ต์์ ๋ณธ ๋๊ธฐ๋ถ๋ค๊ณผ ์ด์ผ๊ธฐํ๋ฉฐ ๊นจ๋ฌ์ ์ ์ด ์๋ค.
๋จ์ํ ์ ๋ต์ ๋ถ๋ฅด๋๊ฒ ์๋๋ผ ์ข๋ ์ปดํจํฐ์ ์
์ฅ์์ ๋ณผ๊ฒฝ์ฐ
for loops๋ฅผ ๋๋ฒ ์ฌ์ฉํ๋๊ฒ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๋ ๊ตฌ๋ฌธ์ด ๋๋ค๋ ์ ์ด๋ค. ์๊ณ ๋ฆฌ์ฆ์ด๋๊ฒ ์ด๋ฐ๊ฑฐ๊ตฌ๋~ ๋ผ๋ ์๊ฐ์ด ๋ค๋ ์๊ฐ์ด์๋ค.
๋ค์์ฃผ๋ ํ์ดํ !!๐ฅ๐ฅ๐ฅ๐ฅ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([๐คCode Kata] 2week-3), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@fhwmqkfl/Code-Kata-2week-3์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค