Skip to content

30 Days Of Python: Day 7 - Sets

Twitter Follow

Author: Asabeneh Yetayeh
Second Edition: July, 2021

<< Day 6 | Day 8 >>

30DaysOfPython

๐Ÿ“˜ Day 7

Sets

์„ธํŠธ๋Š” ํ•ญ๋ชฉ์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ์ดˆ๋“ฑํ•™๊ต ๋˜๋Š” ๊ณ ๋“ฑํ•™๊ต ์ˆ˜ํ•™ ์ˆ˜์—…์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง‘ํ•ฉ์˜ ์ˆ˜ํ•™ ์ •์˜๋Š” Python์—์„œ๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง‘ํ•ฉ์€ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์‹ฑ๋˜์ง€ ์•Š์€ ๊ฐœ๋ณ„ ์š”์†Œ์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. Python์—์„œ ์ง‘ํ•ฉ์€ ๊ณ ์œ ํ•œ ํ•ญ๋ชฉ์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ์ง‘ํ•ฉ ๊ฐ„์— ํ•ฉ์ง‘ํ•ฉ , ๊ต์ฐจ , ์ฐจ์ด , ๋Œ€์นญ์  ์ฐจ์ด , ํ•˜์œ„ ์ง‘ํ•ฉ , ์ƒ์œ„ ์ง‘ํ•ฉ ๋ฐ ๋ถ„๋ฆฌ ์ง‘ํ•ฉ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธํŠธ ๋งŒ๋“ค๊ธฐ

์ค‘๊ด„ํ˜ธ {}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธํŠธ ๋˜๋Š” set() ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ๋นˆ ์„ธํŠธ ๋งŒ๋“ค๊ธฐ
# syntax
st = {}
# or
st = set()
  • ์ดˆ๊ธฐ ํ•ญ๋ชฉ์œผ๋กœ ์„ธํŠธ ๋งŒ๋“ค๊ธฐ
# syntax
st = {'item1', 'item2', 'item3', 'item4'}

์˜ˆ์‹œ:

# syntax
fruits = {'banana', 'orange', 'mango', 'lemon'}

์„ธํŠธ์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ

len() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง‘ํ•ฉ์˜ ๊ธธ์ด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

# syntax
st = {'item1', 'item2', 'item3', 'item4'}
len(set)

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
len(fruits)

์„ธํŠธ์˜ ํ•ญ๋ชฉ์— ์•ก์„ธ์Šค

๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ญ๋ชฉ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฃจํ”„ ์„น์…˜์—์„œ ์ด๊ฒƒ์„ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค

ํ•ญ๋ชฉ ํ™•์ธ

๋ชฉ๋ก์— ํ•ญ๋ชฉ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฉค๋ฒ„์‹ญ ์—ฐ์‚ฐ์ž ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# syntax
st = {'item1', 'item2', 'item3', 'item4'}
print("Does set st contain item3? ", 'item3' in st) # Does set st contain item3? True

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
print('mango' in fruits ) # True

์„ธํŠธ์— ํ•ญ๋ชฉ ์ถ”๊ฐ€

์„ธํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • add() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ•ญ๋ชฉ ์ถ”๊ฐ€
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.add('item5')

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.add('lime')
  • update() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ ์ถ”๊ฐ€ update() ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ธํŠธ์— ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. update() ๋Š” ๋ชฉ๋ก ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.update(['item5','item6','item7'])

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot')
fruits.update(vegetables)

์„ธํŠธ์—์„œ ํ•ญ๋ชฉ ์ œ๊ฑฐ

remove() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง‘ํ•ฉ์—์„œ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ๋ชฉ์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด remove() ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์ฃผ์–ด์ง„ ์ง‘ํ•ฉ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, discard() ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.remove('item2')

pop() ๋ฉ”์„œ๋“œ๋Š” ๋ชฉ๋ก์—์„œ ์ž„์˜์˜ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ œ๊ฑฐ๋œ ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.pop()  # removes a random item from the set

์ œ๊ฑฐ๋œ ํ•ญ๋ชฉ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ.

fruits = {'banana', 'orange', 'mango', 'lemon'}
removed_item = fruits.pop()

์„ธํŠธ์˜ ํ•ญ๋ชฉ ์ง€์šฐ๊ธฐ

์„ธํŠธ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ๋น„์šฐ๋ ค๋ฉด clear ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# syntax
st = {'item1', 'item2', 'item3', 'item4'}
st.clear()

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
fruits.clear()
print(fruits) # set()

์„ธํŠธ ์‚ญ์ œ

์„ธํŠธ ์ž์ฒด๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด del ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# syntax
st = {'item1', 'item2', 'item3', 'item4'}
del st

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
del fruits

๋ชฉ๋ก์„ ์ง‘ํ•ฉ์œผ๋กœ ๋ณ€ํ™˜

๋ฆฌ์ŠคํŠธ๋ฅผ ์„ธํŠธ๋กœ, ์„ธํŠธ๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก์„ ์„ธํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์ค‘๋ณต ํ•ญ๋ชฉ์ด ์ œ๊ฑฐ๋˜๊ณ  ๊ณ ์œ ํ•œ ํ•ญ๋ชฉ๋งŒ ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

# syntax
lst = ['item1', 'item2', 'item3', 'item4', 'item1']
st = set(lst)  # {'item2', 'item4', 'item1', 'item3'} - the order is random, because sets in general are unordered

์˜ˆ์‹œ:

fruits = ['banana', 'orange', 'mango', 'lemon','orange', 'banana']
fruits = set(fruits) # {'mango', 'lemon', 'banana', 'orange'}

์ง‘ํ•ฉ ๊ฒฐํ•ฉ

union() ๋˜๋Š” update() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ง‘ํ•ฉ์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Union ์ด ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st3 = st1.union(st2)

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
print(fruits.union(vegetables)) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'}
  • ์—…๋ฐ์ดํŠธ ์ด ๋ฉ”์„œ๋“œ๋Š” ์ฃผ์–ด์ง„ ์ง‘ํ•ฉ์— ์ง‘ํ•ฉ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item5', 'item6', 'item7', 'item8'}
st1.update(st2) # st2 contents are added to st1

์˜ˆ์‹œ:

fruits = {'banana', 'orange', 'mango', 'lemon'}
vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'}
fruits.update(vegetables)
print(fruits) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'}

๊ต์ฐจ ํ•ญ๋ชฉ ์ฐพ๊ธฐ

Intersection์€ ๋‘ ์ง‘ํ•ฉ ๋ชจ๋‘์— ์žˆ๋Š” ํ•ญ๋ชฉ ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค

# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item3', 'item2'}
st1.intersection(st2) # {'item3', 'item2'}

์˜ˆ์‹œ:

whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.intersection(even_numbers) # {0, 2, 4, 6, 8, 10}

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.intersection(dragon)     # {'o', 'n'}

ํ•˜์œ„ ์ง‘ํ•ฉ ๋ฐ ์ˆ˜ํผ ์ง‘ํ•ฉ ํ™•์ธ

์ง‘ํ•ฉ์€ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ ๋˜๋Š” ์ƒ์œ„ ์ง‘ํ•ฉ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Subset: issubset()
  • Super set: issuperset
# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.issubset(st1) # True
st1.issuperset(st2) # True

์˜ˆ์‹œ:

whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.issubset(even_numbers) # False, because it is a super set
whole_numbers.issuperset(even_numbers) # True

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.issubset(dragon)     # False

๋‘ ์„ธํŠธ ๊ฐ„์˜ ์ฐจ์ด ํ™•์ธ

๋‘ ์ง‘ํ•ฉ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.difference(st1) # set()
st1.difference(st2) # {'item1', 'item4'} => st1\st2

์˜ˆ์‹œ:

whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_numbers = {0, 2, 4, 6, 8, 10}
whole_numbers.difference(even_numbers) # {1, 3, 5, 7, 9}

python = {'p', 'y', 't', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.difference(dragon)     # {'p', 'y', 't'}  - the result is unordered (characteristic of sets)
dragon.difference(python)     # {'d', 'r', 'a', 'g'}

๋‘ ์ง‘ํ•ฉ ๊ฐ„์˜ ๋Œ€์นญ์  ์ฐจ์ด ์ฐพ๊ธฐ

๋‘ ์ง‘ํ•ฉ ๊ฐ„์˜ ๋Œ€์นญ ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ•™์ ์œผ๋กœ ๋‘ ์„ธํŠธ์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ œ์™ธํ•˜๊ณ  ๋‘ ์„ธํŠธ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜๋Š” ์„ธํŠธ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. (A\B) โˆช (B\A)

# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
# it means (A\B)โˆช(B\A)
st2.symmetric_difference(st1) # {'item1', 'item4'}

์˜ˆ์‹œ:

whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
some_numbers = {1, 2, 3, 4, 5}
whole_numbers.symmetric_difference(some_numbers) # {0, 6, 7, 8, 9, 10}

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.symmetric_difference(dragon)  # {'r', 't', 'p', 'y', 'g', 'a', 'd', 'h'}

์ง‘ํ•ฉ ๊ฒฐํ•ฉ

๋‘ ์„ธํŠธ์— ๊ณตํ†ต ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ๋ถ„๋ฆฌ ์„ธํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. isdisjoint() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ง‘ํ•ฉ์ด ๊ฒฐํ•ฉ์ธ์ง€ ๋ถ„๋ฆฌ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.isdisjoint(st1) # False

์˜ˆ์‹œ:

even_numbers = {0, 2, 4 ,6, 8}
even_numbers = {1, 3, 5, 7, 9}
even_numbers.isdisjoint(odd_numbers) # True, because no common item

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.isdisjoint(dragon)  # False, there are common items {'o', 'n'}

๐ŸŒ• ๋‹น์‹ ์€ ๋– ์˜ค๋ฅด๋Š” ๋ณ„์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋ฐฉ๊ธˆ 7์ผ์ฐจ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์™„๋ฃŒํ–ˆ์œผ๋ฉฐ ์œ„๋Œ€ํ•จ์„ ํ–ฅํ•œ ๋‹น์‹ ์˜ ๊ธธ์— 7๊ฑธ์Œ ์•ž์„œ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‡Œ์™€ ๊ทผ์œก์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ›ˆ๋ จ์„ ํ•˜์‹ญ์‹œ์˜ค.

๐Ÿ’ป Exercises: Day 7

# sets
it_companies = {'Facebook', 'Google', 'Microsoft', 'Apple', 'IBM', 'Oracle', 'Amazon'}
A = {19, 22, 24, 20, 25, 26}
B = {19, 22, 20, 25, 26, 24, 28, 27}
age = [22, 19, 24, 25, 26, 24, 25, 24]

Exercises: Level 1

  1. ์ง‘ํ•ฉ it_companies์˜ ๊ธธ์ด ์ฐพ๊ธฐ
  2. it_companies์— 'Twitter' ์ถ”๊ฐ€
  3. it_companies ์ง‘ํ•ฉ์— ์—ฌ๋Ÿฌ IT ํšŒ์‚ฌ๋ฅผ ํ•œ ๋ฒˆ์— ์‚ฝ์ž…
  4. it_companies ์ง‘ํ•ฉ์—์„œ ํšŒ์‚ฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  5. ์ œ๊ฑฐํ•˜๋‹ค์™€ ๋ฒ„๋ฆฌ๋‹ค์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Exercises: Level 2

  1. A์™€ B๋ฅผ ๊ฒฐํ•ฉ
  2. ๊ต์ฐจ ํ•ญ๋ชฉ ์ฐพ๊ธฐ
  3. A๋Š” B์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ
  4. A์™€ B๋Š” ์„œ๋กœ์†Œ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  5. A๋Š” B์™€, B๋Š” A์™€ ์กฐ์ธ
  6. A์™€ B์˜ ๋Œ€์นญ ์ฐจ์ด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ
  7. ์„ธํŠธ๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œ

Exercises: Level 3

  1. ์—ฐ๋ น์„ ์„ธํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ชฉ๋ก์˜ ๊ธธ์ด์™€ ์„ธํŠธ์˜ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์–ด๋Š ๊ฒƒ์ด ๋” ํฝ๋‹ˆ๊นŒ?
  2. ๋ฌธ์ž์—ด, ๋ชฉ๋ก, ํŠœํ”Œ ๋ฐ ์ง‘ํ•ฉ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.
  3. ์ €๋Š” ๊ต์‚ฌ์ด๊ณ  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜๊ฐ์„ ์ฃผ๊ณ  ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ์— ์‚ฌ์šฉ๋œ ๋…ํŠนํ•œ ๋‹จ์–ด๋Š” ๋ช‡ ๊ฐœ์ž…๋‹ˆ๊นŒ? ๋ถ„ํ•  ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ ์œ ํ•œ ๋‹จ์–ด๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽ‰ ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ๐ŸŽ‰

<< 6์ผ์ฐจ | 8์ผ์ฐจ >>