[til] 220318 - css animations, ์ด์ฝํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๐ป ์ค๋ ํ ์ผ ๐ป
โ๏ธ ์ฝ์ฝ์ํก ํด๋ก ์ฝ๋ฉ - more animations ~ no mobile media query (ํด๋ก ๋)
โ๏ธ BOJ - #7576 ํ ๋งํ
โ๏ธ ์ด์ฝํ - ์ ๋ ฌ ๊ฐ์ + ์์
์ฝ์ฝ์ํก ํด๋ก ์ฝ๋ฉ - animations:
@keyframes heartBeat {
0%{
color: white;
}
50%{
color: tomato;
transform: scale(1.3);
}
100%{
color: white;
}
}
.open-post__heart-count:hover i {
will-change: transform;
animation: heartBeat 1s linear infinite;
}
* will-change: transform โก๏ธ ์ ์๋ transform animation์ด ํ๋ค๋ฆฌ๋ฉด์ ๋ถ์์ ํ๊ฒ ์๋ํ๋๋ฐ, ์ด ์ฝ๋๋ก ๋ธ๋ผ์ฐ์ ์๊ฒ animation์ด ์๋ํ ๊ฒ์ด๋ผ๊ณ ์๋ ค์ค์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ๋ํฝ ์นด๋๋ฅผ ์ฌ์ฉํด accelerates the animation. ์๋ฌดํผ ์ ๋๋ฉ์ด์ ์ด ์์ ์ ์ผ๋ก ์๋ํ๋๋ก ํ๋ ์ฝ๋. โก๏ธ ์ ๋๋ฉ์ด์ ์ด ํ๋ค๋ฆฌ๊ฑฐ๋ ๊ทธ๋ด ๋ ์์ฑํด์ฃผ๊ธฐ.
โ๏ธ ๋ฌธ๋ฒ
.reply:focus-within .reply__column:first-child {
display: none;
}
* reply ํด๋์ค์ focus-within ๋ ๋ reply__column:first-child ์ ์ ์ฉ.
โ๏ธ fade ๋๊ฒ ํ๋ ๋ฒ (+ transition)
.reply .reply__column:first-child,
.reply .fa-smile-wink,
.reply button {
transition: opacity .3s ease-in-out; /* transition ์ด ์์ด์ผ ํ ์๊ฐ์ ์ ์ฌ๋ผ์ง */
}
.reply:focus-within .reply__column:first-child,
.reply:focus-within .fa-smile-wink,
.reply:focus-within button {
opacity: 0;
}
* ์ฌ๊ธฐ์ ์ฃผ์ํ ๊ฑด opacity๋ ๋ญ๋ ์ด๋ฒคํธ ๋ฐ์ ์ ์ ์ฉํ ์์ฑ์ transition๊ณผ ํจ๊ป ์ ์ฉํ๋ ค๋ฉด ์๋ element์ css ํํธ์๋ค๊ฐ transition์ ์ค์ ํด์ค์ผ ํ๋ค๋ ์ .
transition: [transition ์ ์ฉํ ์์ฑ] [์ด] [ํจ๊ณผ] ์ด๋ฐ์. [transition ์ ์ฉํ ์์ฑ] ์ด ๋ง์ฝ ์ ์ฒด ์์ฑ์ ๋ฃ์ ๊ฑฐ๋ฉด ๊ทธ๋ฅ 'all' ํด์ฃผ๋ฉด ๋จ.
โ๏ธ mobile media query ๋ชจ๋ฐ์ผ ํ๋ฉด ์ฌ์ด์ฆ๋ง ์ ๊ณตํ๋๋ก ํ๋ ๋ฒ :
<div id="no-mobile">
<span>Your screen is too big!!</span>
</div>
์ ์ฝ๋๋ฅผ ๋ชจ๋ html ์ ์ถ๊ฐํด์ค๋ค.
no-mobile ์ ์ฉ css ๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ฃผ๊ณ (components file ์ ์ถ๊ฐ)
#no-mobile {
position: absolute; /* goes on top of everything */
z-index: 99; /* ์ซ์ ๋๊ฒ ์ค์ ํด์ ์ด๋ค ํ๋ฉด๋ณด๋ค ๋ ์์ ์๋๋ก */
height: 100vh;
background-color: orange;
width: 100vw;
display: flex;
justify-content: center;
align-items: center;
font-size: 32px;
top:0;
}
@media screen and (max-width:645px) {
#no-mobile {
display: none;
}
}
์ฌ๊ธฐ์ ํฌ์ธํธ๋ position: absolute ๋ z-index:99 (์ค๋ช
์ ์ฃผ์์)
#no-mobile div๋ฅผ ์์ฑํด ํ๋ฉด์ด ๋๋ฌด ํฌ๋ค๋ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ปค๋ค๋ div๋ฅผ ๋ง๋ฆ. (๊ฐ์ฅ ์์ ์ค๋๋ก)
์ฌ์ฉ์๊ฐ ํ๋ฉด์ 645px ๋์ด์ ๋ํ๋ฉด display: none; ์ด ์ ์ฉ๋๊ณ , ๊ทธ ์ดํ์ผ ๋๋ display:flex; ์ ์ฉ.
๐ ์ ๋ ฌ 4๊ฐ์ง ์ ๋ฆฌ:
โ๏ธ ์ ํ ์ ๋ ฌ (1/4) : <๋ฏธ์ฒ๋ฆฌ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ์๋ฆฌ ๋ฐ๊ฟ์ฃผ๋ ๊ณผ์ > ์ ๋ฐ๋ณต
- ํ์ ๋ฒ์๋ ๋งค๋ฒ ์ค์ด๋ฆ.
- ๋งค๋ฒ ๊ฐ์ฅ ์์ ์์๋ฅผ ํ์ํด์ผ ํจ. -> ์ด์ค for ๋ฌธ
array = [7, 5, 8, 6]
for i in range(len(array)):
min_index = i
for j in range(i+1, len(array)):
if array[min_index] > array[j]:
min_index = j
์ด์ j ์ ๊ฐ์ฅ ์์ ๊ฐ์ ์์ ์ธ๋ฑ์ค๊ฐ ์ ์ฅ๋จ.
๊ทธ ํ ์๋์ฒ๋ผ ์ค์์ ํตํด <๋ฏธ์ฒ๋ฆฌ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์์ ์์> ์ <๊ฐ์ฅ ์์ ์์> ์ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ค.
array[i], array[min_index] = array[min_index], array[i]
# ํ์ด์ฌ์ ํ ์ค๋ก swap ๊ฐ๋ฅ
์๊ฐ๋ณต์ก๋: O(N^2)
โ๏ธ ์ฝ์ ์ ๋ ฌ (2/4) : ๋ฏธ์ฒ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๊ณจ๋ผ ์ ์ ํ ์์น์ ์ฝ์
(์ผ์ชฝ ๋ฐ์ดํฐ๋ค๊ณผ ๋น๊ตํด์ ์ ์ ํ ์์น๋ก ์ด๋์ํจ๋ค)
array = [7, 5, 8, 6]
for i in range(1, len(array)):
for j in range(i, 0, -1): # ์ธ๋ฑ์ค ๊ฑฐ๊พธ๋ก ( ์ผ์ชฝ ๋ฐ์ดํฐ๋ค๊ณผ ๋น๊ต )
if array[j] < array[j-1]:
array[j], array[j-1] = array[j-1], array[j] # ์๊ธฐ๋ณด๋ค ์์ ๋ฐ์ดํฐ ๋ง๋๋ฉด ๋ฉ์ถ๊ณ ๊ทธ ์์น๋ก
else:
break
์๊ฐ๋ณต์ก๋: O(N^2)
ํ์ฌ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ๋ผ๋ฉด ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์. ์ต์ ์ ๊ฒฝ์ฐ O(N) (์ด๋ฏธ ๋ค ์ ๋ ฌ๋ ๊ฒฝ์ฐ)
โ๏ธ ํต ์ ๋ ฌ (3/4) : ๊ธฐ์ค ๋ฐ์ดํฐ (Pivot) ๋ฅผ ์ค์ , <(์ผ์ชฝ์์๋ถํฐ) ๊ธฐ์ค๋ณด๋ค ํฐ ๋ฐ์ดํฐ>์ <(์ค๋ฅธ์ชฝ์์๋ถํฐ) ๊ธฐ์ค๋ณด๋ค ์์ ๋ฐ์ดํฐ>์ ์์น ๋ฐ๊ฟ ๋ถํ ์์ ํ ๋ค์ ๊ฐ๊ฐ์ ๋ถํ ๋ ๋ถ๋ถ์์ ๋ค์ ๋ถํ ์์ ๋ฐ๋ณต. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ. ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ.
- ํ๋ค๋ณด๋ฉด ์์น๊ฐ ์๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ (ํผ๋ฒ๋ณด๋ค ํฐ๊ฒ ์ค๋ฅธ์ชฝ์ ์๊ณ ์์๊ฒ ์ผ์ชฝ์ ์์ ๋) ๊ฐ ์๊ธฐ๋๋ฐ ์ด ๋๋ <ํผ๋ฒ> ๊ณผ <์์ ๋ฐ์ดํฐ>์ ์์น๋ฅผ ๋ฐ๊พผ๋ค.
- ํธ์ด๋ถํ ๋ฐฉ์์ ์ฌ์ฉ, ํผ๋ฒ์ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ก ์ค์ .
- ์ฌ๊ท์ :๋ค์ ์ผ์ชฝ ๋ฐ์ดํฐ ๋ฌถ์์ ๋ํด ํต ์ ๋ ฌ, ์ค๋ฅธ์ชฝ์๋ ๋ค์ ํต ์ ๋ ฌ.
array = [7, 5, 8, 6]
def quick_sort(array, start, end): #(๋ฐฐ์ด, ์ฒซ๋ฒ์งธ ์์ ์ธ๋ฑ์ค, ๋ง์ง๋ง ์ธ๋ฑ์ค)
if start >= end: # ์์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ ์ข
๋ฃ
return
pivot = start # ํผ๋ฒ์ ์ฒซ ๋ฒ์งธ ์์
left = start + 1
right = end
while (left <= right): # ๋ถํ ์์
(์๋ฆฌ ๊ต์ฒด์ ๋ฐ๋ณต) (์๊ฐ๋ฆฌ์ง ์์ ๋๊น์ง)
while (left <= end and array[left] <= array[pivot]): # ํผ๋ฒ๋ณด๋ค ์์ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
left += 1
while (right > start and array[right] >= array[pivot]): # ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
right -= 1
if (left > right): #์๊ฐ๋ ธ๋ค๋ฉด <ํผ๋ฒ>๊ณผ <์์ ๋ฐ์ดํฐ> ์๋ฆฌ ๊ต์ฒด
array[right], array[pivot] = array[pivot], array[right]
else: #์๊ฐ๋ฆฌ์ง ์์๋ค๋ฉด <์์ ๋ฐ์ดํฐ>์ <ํฐ ๋ฐ์ดํฐ> ์๋ฆฌ ๊ต์ฒด
array[left], array[right] = array[right], array[left]
# ๋ถํ ์์
์๋ฃ ํ ๊ฐ ๋ถํ ์ ๋ํด ๋ค์ ๋ถํ ์์
์ํ (์ฌ๊ท์ ์ผ๋ก)
quick_sort(array, start, right-1)
quick_sort(array, right+1, end)
quick_sort(array, 0, len(array)-1)
์๋๋ ๋ ์งง์ ๋ฐฉ๋ฒ: (๋จ ๋ ๋นํจ์จ์ )
def quick_sort(array):
if len(array) <= 1: # ์์๊ฐ ํ๋ ์ดํ๋ฉด ์ข
๋ฃ
return array
pivot = array[0]
tail = array[1:] # ํผ๋ฒ์ ์ ์ธํ ๋ฆฌ์คํธ
left_side = [x for x in tail if x <= pivot] # ๋ถํ ๋ ์ผ์ชฝ ๋ถ๋ถ ๋ฆฌ์คํธ
right_side = [x for x in tail if x > pivot] # ๋ถํ ๋ ์ค๋ฅธ์ชฝ ๋ถ๋ถ ๋ฆฌ์คํธ
return (quick_sort(left_side) + [pivot] + quick_sort(right_side)) # ๊ฐ๊ฐ ์ ๋ ฌ ํ ๋ค์ ํฉ์นจ
์๊ฐ๋ณต์ก๋: O(NlogN)
์ต์
์ ๊ฒฝ์ฐ O(N^2) (ํผ๋ฒ์ด ์ค๊ฐ ๊ฐ์ด ์๋๋ผ ๊ทน๋จ์ ๊ฐ์ผ ๋)
โ๏ธ ๊ณ์ ์ ๋ ฌ (4/4) : ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์ ํ๋์ด ์ ์ ํํ๋ก ํํํ ์ ์์ ๋
๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ช๊ฐ ์๋์ง ์ธ๋ฑ์ค๋ง๋ค ๊ฐ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ์ ์ฅ.
array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2] # 0, 1, 2๋ ๋ ๋ฒ์ฉ, ๋๋จธ์ง๋ ํ ๋ฒ์ฉ ์์.
count = [0] * (max(array)+1) # 0๋ถํฐ ๊ฐ์ฅ ํฐ ๊ฐ๊น์ง ์ ์ฒด๋ฅผ ํฌํจํ๋๋ก ์๋ก์ด ๋ฐฐ์ด ์์ฑ
for i in range(len(array)):
count[array[i]] += 1 # ๋ฐฐ์ด์ ์์ ๊ฐ = count ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๊ฐ. ํด๋น ์ธ๋ฑ์ค์ ์์์ ๊ฐ์๋ฅผ ์ ์ฅ.
for i in range(len(count)):
for j in range(count[i]): # ์์์ ๊ฐ์(ํ์), ์ฆ count[i]์ ๊ฐ๋งํผ ํด๋น ์์ ์ถ๋ ฅ
print(i, end=' ')
- ๋ง์ฝ K, ์ฆ ๋ฐฐ์ด์ ์ต๋๊ฐ์ด ๋ฐ์ดํฐ ์ ์ฒด ๊ฐ์์ ๋นํด ๋๋ฌด ํด ๋๋ ๋นํจ์จ์ .
- ๋์ผ ๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๋๋ ํจ์จ์ .

์๊ฐ๋ณต์ก๋: ์ต์ ์ ๊ฒฝ์ฐ์๋ O(N+K) (K: ๋ฐ์ดํฐ ์ค ์ต๋๊ฐ, ์ฆ count ๋ฐฐ์ด์ ํฌ๊ธฐ)
โป ํ์ด์ฌ์์ ์ ๊ณตํ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ .sort()๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ ์ ๊ฒฝ์ฐ์๋ ์๊ฐ๋ณต์ก๋๊ฐ O(NlogN)
๋ฐ๋ผ์ ๋ฌธ์ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ ํํ์ง ์์ผ๋ฉด ์ด๋ฅผ ์ฌ์ฉ
- ์ ํญ ๊ฐ์ ๋ค์ผ๋ฉด์ ๋์์ ์ ๋ฆฌํ๋ ์์ผ๋ก ํด๋ดค๋๋ฐ ์๊ฐ์ด ๋์ด~๋ฌด ์ค๋๊ฑธ๋ฆฐ๋ค.
๊ทธ๋ฅ ๊ฐ์ ํ์ด๋๊ณ ์ฑ ๋ณด๋ฉด์ ์ดํดํ ๋ด์ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ ๊ฒ ๋์ ๋ฏ.