2020. 12. 30. 18:00γπ Algorithm/π Python λ¬Έλ²
μ€λμ νμ΄μ¬ 곡λΆν λ λ§μ΄ μ μ©νλ νλ‘κ·Έλλ¨Έμ€μ 'νμ΄μ¬μ νμ΄μ¬ λ΅κ²' κ°μμ λν΄ μκ°ν΄λλ¦¬κ³ μ ν΄μ!
νμ΄μ¬ μ λ§ν λ¬Έλ²μ λν΄ λ€ μ μκ³ μλ€κ³ μκ°νλλ° 'νμ΄μ¬μ νμ΄μ¬λ΅κ²' κ°μμ λ¬Έμ λ₯Ό νμ΄λ³΄λ©΄μ μμ§ λ§μ΄ λΆμ‘±νκ³ , νμ΄μ¬μ μ λ§ λ¬΄κΆλ¬΄μ§ν μΈμ΄λΌλ κ²μ μμμ΄μ! μκ³ λ¦¬μ¦ λ¬Έμ ν λ νμ΄μ¬μ΄ μΌλ§λ μ’μ μΈμ΄μΈμ§λ λ€μνλ² κΉ¨λ¬μμ΅λλ€ π
κ·Έλμ ! 'νμ΄μ¬μ νμ΄μ¬ λ΅κ²' κ°μμμ μλ‘κ² λ°°μ΄ μ μ©ν νμ΄μ¬ λ¬Έλ²/λͺ¨λμ λν΄ μ 리ν΄λ³Όκ²μ!
'νμ΄μ¬μ νμ΄μ¬ λ΅κ²' κ°μ μμ½ λ° μ 리λΌκ³ μκ°νμλ©΄ λ κ±° κ°μ΅λλ€ : )
π λͺ«κ³Ό λλ¨Έμ§λ₯Ό ꡬν λ?! - divmod
보ν΅μ λͺ«κ³Ό λλ¨Έμ§λ₯Ό ꡬν λ μ΄λ»κ² ꡬνμλμ!? μλμ κ°μ΄ μ°μ°μλ₯Ό μ΄μ©νμ¬ λͺ«, λλ¨Έμ§ λ°λ‘ ꡬνμ€ κ±° κ°μλ°μ.
divmodλ₯Ό μ΄μ©νλ©΄ λ³΄λ€ μ½κ² λͺ« κ³Ό λλ¨Έμ§λ₯Ό λμμ ꡬνμ€ μ μμ΅λλ€.
a = 7
b = 5
print( a//b , a%b ) # 1 2 μΆλ ₯
a = 7
b = 5
print( *divmod(a, b) ) # 1 2 μΆλ ₯
π n μ§λ² νκΈ° λ stringμ 10 μ§λ² μ«μλ‘ λ³ννκΈ° - int
stringμΌλ‘ νκΈ°λ n μ§λ² μ«μλ₯Ό 10 μ§λ²μΌλ‘ λ³ννλ λ¬Έμ κ° μμμ΅λλ€.
μ κ° μκ³ μλ intλ Integer νμΌλ‘ λ³νμ ν΄μ£Όλ μν λ§ νλ€κ³ μκ°νμλλ° μ΄λ² κΈ°νμ 10μ§λ² λ³νλ μλμΌλ‘ ν΄μ€λ€λ μ¬μ€μ λ°°μ μ΅λλ€!
νμ΄μ¬μ μ¬μ©νλ©΄ μ§λ² λ³νλ λ§€μ° μ½κ² ν μ μλ€λ κ±Έ λ°°μ°κ² λμμ΄μ.
num = '3212'
base = 5
st = [int(i) for i in str(num)] # string μ«μλ₯Ό νκΈμμ© μͺΌκ°μ΄ intνμΌλ‘ listμ μ μ₯νκΈ°
st.reverse() # μ§λ²μ λ§κ² κ³±ν΄μ£ΌκΈ° μνμ¬ list κ±°κΎΈλ‘ νκΈ°
answer = 0 # 10μ§λ²μΌλ‘ λ³νλ μ«μ λν΄μ£ΌκΈ°
for i in range(len(st)):
answer += st[i]*(base**i)
num = '3212'
base = 5
answer = 0
for idx, i in enumerate(num[::-1]):
answer += int(i) * ( base ** idx )
μ΄λ κ² κ½€ κΈ΄ μμμ intλ₯Ό ν΅ν΄ λ¨ νλ²μ 10μ§λ²μΌλ‘ μ§λ² λ³νμ΄ κ°λ₯ν©λλ€.
num = '3212'
base = 5
answer = int(num, base)
π λ¬Έμμ΄ μ λ ¬νκΈ° - ljust, center, rjust
λ¬Έμμ΄μ λν ν¨μλ€μ μ 리ν΄λ Ό μ μμλλ°, ljust,center,rjustμ μ¬μ©λ²μ λν΄μλ μ λͺ¨λ₯΄κ³ μμμ΅λλ€.
μ΄λ²μ λ¬Έμμ΄ μ λ ¬ λ¬Έμ λ₯Ό νλ©΄μ μ΄λ κ² μ¬μ©λλ ꡬλ κΉ¨λ¬μμ΅λλ€.
π λ¬Έμμ΄ sλ₯Ό μ’μΈ‘ / κ°μ΄λ° / μ°μΈ‘ μ λ ¬ν κΈΈμ΄ nμΈ λ¬Έμμ΄μ ν μ€μ© νλ¦°νΈν΄λ³΄κΈ°
s = 'κ°λλ€λΌ'
n = 7
s.ljust(n) # μ’μΈ‘ μ λ ¬
s.center(n) # κ°μ΄λ° μ λ ¬
s.rjust(n) # μ°μΈ‘ μ λ ¬
π μνλ²³ μΆλ ₯νκΈ° - string λͺ¨λ
λ³΄ν΅ 'a' λΆν° 'z'κΉμ§ μΆλ ₯νμμ€ νλ©΄ 'abcd....xyz' μ΄λ κ² νλνλ λμ΄νλ κ²½μ°κ° λ§μμ κ±° κ°μλ°μ.
μ λν νλνλ λΆνμνκ² λμ΄νλ μ¬λ μ€ νλͺ μ΄μμ΅λλ€.
string λͺ¨λμλ μλ¬Έμ, λλ¬Έμ, λμλ¬Έμ λͺ¨λ, μ«μλ₯Ό μΆλ ₯ν΄μ£Όλ κΈ°λ₯μ΄ μμμ΅λλ€.
string λͺ¨λμ λν΄ λ λ§μ΄ 곡λΆν΄μΌ κ² μ΄μ!
import string
string.ascii_lowercase # μλ¬Έμ abcdefghijklmnopqrstuvwxyz
string.ascii_uppercase # λλ¬Έμ ABCDEFGHIJKLMNOPQRSTUVWXYZ
string.ascii_letters #λμλ¬Έμ λͺ¨λ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
string.digits # μ«μ 0123456789
π 2μ°¨μ 리μ€νΈ λ€μ§κΈ° - zip
' [ [1,2,3], [4,5,6], [7,8,9] ] 리μ€νΈκ° μ£Όμ΄μ§ κ²½μ°, [[1, 4, 7], [2, 5, 8], [3, 6, 9]] λ‘ λ€μ§μ΄λΌ ' λΌλ λ¬Έμ λ₯Ό λ³΄κ³ μ΄λ»κ² λ€μ§μ μ μμκΉ μκ°ν΄λ³΄λ€ 리μ€νΈμ νκ³Ό μ΄μ κΈΈμ΄κ° κ°λ€λ 쑰건μ λ³΄κ³ , forλ¬Έμ ν΅ν΄ temp 리μ€νΈμ 1ν 1μ΄, 2ν 1μ΄ .. μμ°¨μ μΌλ‘ μ μ₯νμ¬ μ λ΅ λ¦¬μ€νΈμ λν΄μ£Όλ νμμΌλ‘ ꡬνν΄λ³΄μλλ°μ.
zipμ μ΄μ©νλ©΄ λ³΄λ€ μμνκ² 2μ°¨μ 리μ€νΈλ₯Ό λ€μ§μ μ μλ€λ κ²μ λ°°μ μ΅λλ€.
def solution(mylist):
answer = []
for i in range(len(mylist[0])):
tmp = []
for j in range(len(mylist)):
tmp.append(mylist[j][i])
answer.append(tmp)
return answer
mylist = [ [1,2,3], [4,5,6], [7,8,9] ]
new_list = list(map(list, zip(*mylist)))
μΆκ°λ‘ zipμ μ μ©ν μ¬μ© μμλ μ 리ν΄λ³΄μμ΅λλ€.
βοΈμ¬λ¬ κ°μ Iterable λμμ μνν λ
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for i, j, k in zip(list1, list2, list3):
print( i + j + k )
βοΈKey 리μ€νΈμ Value 리μ€νΈλ‘ λμ λ리 μμ±ν λ
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
π 리μ€νΈμ λͺ¨λ μμμ type λ³ννκΈ° - map
map μ inputμΌλ‘ μ¬λ¬κ°μ μ«μλ₯Ό ν μ€λ‘ λ°μ λ λ§μ΄ μ¬μ©νλ ν¨μλΌ κ½€ μ΅μ νμ€κ±° κ°μλ°μ.
mapμ μμ©ν λ°©λ²μ λν΄λ μκ° ν΄λλ¦¬κ³ μ ν©λλ€.
list1 = ['1', '100', '33']
list2 = list(map(int, list1)) # [1, 100, 33]
βοΈμ΄μ°¨μ 리μ€νΈμ μμμ κΈΈμ΄λ₯Ό λ΄μ 리μ€νΈλ‘ λ§λ€λ
[ [1,2] , [3,4,5], [1] ] ππ» [ 2, 3, 1 ] λ‘ λ§λ€κΈ°
answer = list(map(len,mylist))
νμ mapμ μ¬μ©ν λ int λ§ λ£μ΄λ³Έ κ±° κ°μλ° λ΄κ° μ μν ν¨μλ, lenκ³Ό κ°μ ν¨μλ€μ λ£μ΄λ μλμΌλ‘ μΈμλ€μ ν¨μμ λ£μ΄ λ³νν΄μ£Όλ μ±μ§μ κ°κ³ μλ€λ κ²μ λ°°μΈ μ μμμ΅λλ€.
π sequence μμλ€μ νλλ‘ μ΄μ΄ λΆμ΄κΈ° - join
- λ¬Έμμ΄ λ°°μ΄ ['1', '100', '33']μ μ΄μ΄ λΆμ¬ λ¬Έμμ΄ '110033' λ§λ€κΈ°
- μ μν νν (3, 22, 91)μ μ΄μ΄λΆμ¬ λ¬Έμμ΄ '32291' λ§λ€κΈ°
μμ κ°μ μν©μμ μ΄λ»κ² λΆμΌ μ μμκΉ ?! λ§λ§ν κ²½μ°κ° μμΌμ ¨μ ν λ° νμ΄μ¬μμλ joinμ ν΅ν΄ νλ²μ stringμΌλ‘ μ΄μ΄ λΆμ΄μ€ μ μμ΅λλ€.
my_list = ['1', '100', '33']
answer = ''.join(my_list) # '110033'
βοΈStringμ Listλ‘ λ³ννλ €λ©΄ !?
str = '11 22 33'
list = str.split( ) # ['11', '22', '33']
πκ³±μ§ν©(Cartesian product) ꡬνκΈ° - product
productμ λν΄μλ μκ³ λ¦¬μ¦ λ¬Έμ νλ μμ£Ό λ³΄μ§ λͺ»ν κ² κ°μ§λ§ μμλλ©΄ ν¨μ¬ λΉ λ₯΄κ³ μ½κ² μ¬μ©ν μ μλ ν¨μ μ€ νλμΈ κ² κ°μ΅λλ€!
λ μ€νΈλ§ 'ABCD', 'xy' μ κ³±μ§ν©μΈ Ax Ay Bx By Cx Cy Dx Dy ꡬν λ / 2κ°μ΄μμ iterable κ³±μ§ν© ꡬν λ
import itertools
iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
itertools.product(iterable1, iterable2, iterable3)
π 2μ°¨μ 리μ€νΈλ₯Ό 1μ°¨μ 리μ€νΈλ‘ λ§λ€κΈ° - from_iterable
itertoolsλ₯Ό μ΄μ©νλ©΄ μ½κ² 2μ°¨μ 리μ€νΈλ₯Ό 1μ°¨μ 리μ€νΈλ‘ λ§λ€ μ μμ΅λλ€!
2μ°¨μ 리μ€νΈλ₯Ό 1μ°¨μ 리μ€νΈλ‘ λ§λλ λ°©λ² μ€ κ°λ¨ν λ°©λ²μ λν΄μ μκ°ν΄λ릴κ²μ.
import itertools
my_list = [[1, 2], [3, 4], [5, 6]]
# λ°©λ² 1 - sum ν¨μ
answer = sum(my_list, [])
# λ°©λ² 2 - itertools.chainimport itertools
list(itertools.chain.from_iterable(my_list))
# λ°©λ² 3 - itertoolsμ unpackingimport itertools
list(itertools.chain(*my_list))
# λ°©λ²4 - list comprehension μ΄μ©
[element for array in my_list for element in array]
π μμ΄κ³Ό μ‘°ν© - combinations, permutations
iterableμ μμλ₯Ό κ°μ§κ³ μμ΄κ³Ό μ‘°ν©μ ꡬνλ λ°©λ²μ λν΄ μλ €λλ¦¬κ³ μ ν©λλ€.
μμ΄κ³Ό μ‘°ν©μ ꡬνλ λ°©μμ μμμ κ°μκ° μ μΌλ©΄ μ½κ² ꡬνμ€ μ μμ§λ§ μκ³ λ¦¬μ¦μ ꡬνκΈ°μλ μ΄λ €μ΄ λ¬Έμ μ΄μ§ μμκΉ μΆμ΅λλ€.
itertoolsμ permutationsμ μ΄μ©νλ©΄ λ³΄λ€ μ½κ² ꡬνμ€ μ μμ΅λλ€!
- 1,2,3μ μ«μκ° μ ν μΉ΄λκ° μμ λ, μ΄ μ€ λ μ₯μ κΊΌλ΄λ κ²½μ°μ μ -> 12, 13, 21, 23, 31, 32
- 'A', 'B', 'C'λ‘ λ§λ€ μ μλ κ²½μ°μ μ -> 'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'
import itertools
pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3κ°μ μμλ‘ μμ΄ λ§λ€κΈ°
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2κ°μ μμλ‘ μμ΄ λ§λ€κΈ°
π κ°μ₯ λ§μ΄ λ±μ₯νλ μνλ²³ μ°ΎκΈ° - Counter
collections λͺ¨λμ μ‘΄μ¬νλ Counterλ κ½€ λ§μ΄ μ¬μ©ν΄λ³΄μ ¨μ κ±°λΌκ³ μκ°ν©λλ€.
νμ§λ§ ' mystrμμ κ°μ₯ λ§μ΄ λ±μ₯νλ μνλ²³λ§μ μ¬μ μμΌλ‘ μΆλ ₯νκΈ° ' μ΄λ° λ¬Έμ λ₯Ό λ°μμ λ μ΄λ»κ² λ¬Έμ λ₯Ό νμ΄μΌ ν μ§ λ°λ‘ μκ°λμ§ μμλλ°μ. Counterμ μ΄μ©νλ©΄ μ½κ² ν μ μλ€λ κ±Έ λ°°μΈ μ μμμ΅λλ€.
- 'aab' -> 'a'
- 'dfdefdgf' -> 'df'
- 'bbaa' -> 'ab'
from collections import Counter
my_str = input().strip()
counter = Counter(my_str).most_common()
answer =""
for i in range(len(counter)):
if counter[i][1] == counter[0][1]:
answer+=counter[i][0]
print(''.join(sorted(list(answer))))
collectionsμ Counter ν΄λμ€μλ μμκ° λͺλ² λ±μ₯νλμ§ κ΅¬νλ κ² λ§κ³ λ most_common() μ²λΌ λ°μ΄ν°μ κ°μκ° λ§μ μμΌλ‘ μ λ ¬λ 리μ€νΈλ₯Ό 리ν΄νλ λ©μλλ μ‘΄μ¬ν©λλ€.
from collections import Counter
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 7, 9, 1, 2, 3, 3, 5, 2, 6, 8, 9, 0, 1, 1, 4, 7, 0]
answer = Counter(my_list)
print(answer[1]) # = 4
print(answer[3]) # = 3
print(answer[100]) # = 0
π for λ¬Έκ³Ό ifλ¬Έμ νλ²μ - List comprehensionμ if λ¬Έ
list μμλ€ μ€ 2μ λ°°μλ§μ 2λ°° νμ¬ μ μ₯νκ³ μΆλ€λ©΄ ?! νμ΄μ¬μμλ forλ¬Έκ³Ό ifλ¬Έμ νλ²μ μΈ μ μλ Listμ comprehensionμ΄ μ‘΄μ¬ν©λλ€.
mylist = [3, 2, 6, 7]
answer = [ i**2 for i in mylist if i %2 == 0] # [4, 12]
π flag OR for - else
for λ¬Έμ λλ € 쑰건μ ν΄λΉνλ μμκ° μ‘΄μ¬νλμ§ νμΈν λ€μμ μ‘΄μ¬νλ©΄ Trueλ₯Ό , μ‘΄μ¬νμ§ μμΌλ©΄ Fasleμ κ°μ΄ μΆλ ₯ν΄μΌνλ κ²½μ°κ° μ‘΄μ¬ν μ μμ΅λλ€. μ΄λ for - else λ¬Έμ μ¬μ©νλ©΄ κ°νΈνκ² μ½λλ₯Ό μ§μ€ μ μμ΅λλ€.
λ¬Έμ )
- μ«μλ₯Ό μ°¨λ‘λ‘ κ³±ν΄ λμ¨ μκ° μ κ³±μ1κ° λλ©΄ foundλ₯Ό μΆλ ₯νκ³
- λͺ¨λ μλ₯Ό κ³±ν΄λ μ κ³±μκ° λμ€μ§ μμλ€λ©΄ not foundλ₯Ό μΆλ ₯νκΈ°
import math
numbers = [int(input()) for _ in range(5)]
multiplied = 1
for number in numbers:
multiplied *= number
if math.sqrt(multiplied) == int(math.sqrt(multiplied)):
print('found')
break
else:
print('not found')
π λ λ³μμ κ° λ°κΎΈκΈ° - swap
swapμ νκΈ° μν΄μλ λ³΄ν΅ tempλ₯Ό μ΄μ©νμ¬ λ³ννλ λ°©λ²μ λν΄ μ΅μνμ€ ν λ°μ.
νμ΄μ¬μμλ κ°λ¨νκ² swapλ₯Ό νμ€ μ μμ΅λλ€!
a = 3
b = 'abc'
a, b = b, a # a = 'abc', b = 3
πμ΄μ§ νμ νκΈ° (binary search) - bisect
μ΄μ§ νμμ΄λ ?! μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ 리μ€νΈμμ νΉμ κ° μμΉλ₯Ό μ°Ύμλ΄λ μκ³ λ¦¬μ¦μΌλ‘ κ²μμλκ° λΉ λ₯΄λ€λ μ₯μ μ΄ μμ΅λλ€.
μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό νΈμ€ λ μ΄μ§ νμμ μ¬μ©νλ λ¬Έμ κ° λ§μ΄ λ±μ₯νλλ°μ. μ΄λ μ΄μ§ νμ μκ³ λ¦¬μ¦μ μμ±νλ κ²μ΄ μλ bisectλͺ¨λμ bisect λ₯Ό μ΄μ©νμλ©΄ κ°λ¨νκ² μ΄μ§ νμμ μ΄μ©νμ€ μ μμ΅λλ€.
μ΄μ§ νμ μκ³ λ¦¬μ¦
def bisect(a, x, lo=0, hi=None):
if lo < 0:
raise ValueError('lo must be non-negative')
if hi is None:
hi = len(a)
while lo < hi:
mid = (lo + hi) // 2
if a[mid] < x:
lo = mid + 1
else:
hi = mid
return lo
mylist = [1, 2, 3, 7, 9, 11, 33]
print(bisect(mylist, 3))
bisect λͺ¨λμ μ΄μ©ν μ΄μ§ νμ
import bisect
mylist = [1, 2, 3, 7, 9, 11, 33]
print(bisect.bisect(mylist, 3))
πν΄λμ€μ μΈμ€ν΄μ€ μΆλ ₯ - classμ μλ string casting
classλ₯Ό μμ±ν λ€ printλ¬Έμ μΆκ°λ‘ μΆλ ₯νκ³ μΆμ λκ° μμ΅λλ€.
μ΄λ νμ΄μ¬μμλ __str__ λ©μλλ₯Ό μ΄μ©νμ¬ class λ΄λΆμμ μΆλ ₯ formatμ μ§μ νλ κ²μ΄ κ°λ₯ν©λλ€!
class Coord(object):
def __init__ (self, x, y):
self.x, self.y = x, y
point = Coord(1, 2)
print( '({}, {})'.format(point.x, point.y) )
# λλ
def print_coord(coord):
print( '({}, {})'.format(coord.x, coord.y) )
print_coord(point)
class Coord(object):
def __init__ (self, x, y):
self.x, self.y = x, y
def __str__ (self):
return '({}, {})'.format(self.x, self.y)
point = Coord(1, 2)
π κ°μ₯ ν°μ - inf
infλ₯Ό μ΄μ©νλ©΄ μ무리 ν° μ΄λ€ μ«μμ λΉκ΅νλλΌλ 무쑰건 ν¬λ€κ³ νμ νμ€ μ μμ΅λλ€.
infμλ μμ κΈ°νΈλ₯Ό λΆμΌ μ μλ€λ μ λ κΈ°μ΅ν΄μ£Όμλ©΄ μ’μκ±° κ°μμ.
min_val = float('inf')
min_val > 10000000000
max_val = float('-inf')
π νμΌ μ μΆλ ₯ κ°λ¨νκ² νκΈ°
νμ΄μ¬μ with - as ꡬ문μ μ΄μ©νκ² λλ©΄ νμΌμ closeνμ§ μκ³ μλ closeνμ€ μ μκ³ ,
readlinesμ νμΌμ EOF κΉμ§λ§ μ½μ΄, whileλ¬Έμ ν΅ν΄ EOFλ₯Ό 체ν¬ν νμκ° μμ΅λλ€.
with - as ꡬ문μ νμΌ λΏλ§μλλΌ socket, httpμμλ μ¬μ©νμ€ μ μμ΅λλ€!
with open('myfile.txt') as file:
for line in file.readlines():
print(line.strip().split('\t'))
μ΄λ² ν¬μ€ν μμλ pythonμ μ μ©ν λ¬Έλ²κ³Ό λͺ¨λμ λν΄ μμ보μλλ°μ.
μ λ 'νμ΄μ¬μ νμ΄μ¬ λ΅κ²' κ°μλ₯Ό λ€μΌλ©΄μ μμ£Ό μ μ΅ν νμ΄μ¬ μ½λ μμ±νλ λ²μ λν΄ λ°°μΈ μ μμλ κ² κ°μ΅λλ€.
νμ΄μ¬μΌλ‘ μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό νΈμλ λΆλ€μ΄λΌλ©΄ λ§€μ° μΆμ²νλ κ°μ μ λλ€! : )
'π Algorithm > π Python λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python μλ£κ΅¬μ‘°] Queue (ν) ꡬννκΈ° (0) | 2021.01.06 |
---|---|
리μ€νΈ(List) / λμ λ리(Dictionary) μ λ ¬ (0) | 2020.12.29 |
리μ€νΈ(List) (1) | 2020.12.28 |