μλ£κ΅¬μ‘° λ° μ€μ΅ - [1] μκ³ λ¦¬μ¦ λΆμ μ€μ΅λ¬Έμ (λλ¨Έμ§ μ°μ°, λΉνΈνλ ¬μμ μ΅λ 1ν μ°ΎκΈ°, λμ νκ· ) (3)
λ¬Έμ 1 - λλ¨Έμ§ μ°μ°
β%β(modulo) μ°μ°μλ λλμ μ λλ¨Έμ§λ₯Ό λ°ννλ€. λ§μ κ³Ό λΊμ μ°μ°μλ§μ μ¬μ©νμ¬ aλ₯Ό bλ‘ λλ λλ¨Έμ§λ₯Ό λ°ννλ modulo(a, b) ν¨μμ μ΄λ₯Ό ν μ€νΈν νλ‘κ·Έλ¨μ μμ±νμμ€. λ¨, a β₯ 0, b > 0 μΈ μ μλ€.
β» ννΈ: modulo(a, b) ν¨μλ O(a/b) μκ°μ μ€ννλλ‘ μμ±ν μ μλ€.
#μ λ ₯ μμ 1
>>> 17 3 // 17 % 3
2
#μ λ ₯ μμ 2
>>> 6 3 // 6 % 3
0
#μ λ ₯ μμ 3
>>> 0 5 // 0
0
def modulo(a,b):
temp = True
while temp:
if a>=b:
a=a-b
else :
temp = False
print(a)
a = int(input())
b = int(input())
modulo(a,b)
μ΄κ² κ·Έλ₯ μ§ μ½λμλλ° λΈλ‘κ·Έμ μ 리νλ €κ³ λ³΄λ 'κ΅³μ΄ ?'λΌλ μκ°μ΄ λλ μ½λμ΄λ€...?
def modulo(a,b):
while b<a: # λλμ΄ μ§ μ μλλλ‘ (-κ° μ¬λ¬λ²μ΄λ©΄ λλμ
μ΄λ―λ‘)
if a>=b: # aμμ bλ₯Ό λΊ μ μμΌλ©΄
a=a-b #λΉΌλΌ
print(a)
a = int(input())
b = int(input())
modulo(a,b)
μ½λκ° λ κ°κ²°ν΄μ‘λ€!
λ¬Έμ 2 - λΉνΈνλ ¬μμ μ΅λ 1ν μ°ΎκΈ°
#Slow version
def mostOnes(A,n):
row = 0 #νμ μ ν
jmax = 0 # κ°μ₯ λ§μ 1μ κ°μ§ νμμ 1μ κ°―μλ λͺμΈκ°?
for i in range(n-1): #νμ κ°μλ§νΌ λ°λ³΅
j=0
while((j<n) & (A[i][j]==1)): # jκ° μ΄μ κ°―μλ³΄λ€ μκ³ , μμκ° 1μ΄λ©΄?
j=j+1 #jμ κ°μ μ
λ°μ΄νΈ
if j>jmax: # νμνλ iμ΄μ 1μ κ°―μκ° jmaxλ³΄λ€ ν¬λ€λ©΄
row = i #row μ
λ°μ΄νΈ
jmax = j #1μ κ°―μ μ
λ°μ΄νΈ
print(row)
n = 8
A = [[1,1,1,1,0,0,0,0],[1,1,1,1,1,0,0,0],[1,0,0,0,0,0,0,0],[1,1,1,1,1,1,0,0],[1,1,1,1,0,0,0,0],[0,0,0,0,0,0,0,0],[1,1,1,1,1,1,1,0],[1,1,1,1,1,0,0,0]]
λ¨Όμ O(n^2) μΈ μκ³ λ¦¬μ¦μ λ¨Όμ ꡬννλ€. forλ¬Έ λ΄μ whileλ¬Έμ΄ μ½μ λμ΄ κ° νμ λͺ¨λ μ΄μ νμνκΈ° λλ¬Έμ 2μ°¨μκ°μ΄ μμλλ€. μ΄λ₯Ό κ·Έλ¦ΌμΌλ‘ νννλ©΄ λ€μκ³Ό κ°λ€.

νμ§λ§ λ€μκ³Ό κ°μ μ μ°¨λ₯Ό ν΅ν΄ μκ³ λ¦¬μ¦μ ꡬννλ©΄ O(n)μΈ μκ³ λ¦¬μ¦μ ꡬνν μ μλ€.
1. νλ ¬μ μ’μ μ μμ μΆλ°νλ€.
2. 0μ΄ λ°κ²¬λ λκΉμ§ νλ ¬μ κ°λ‘μ§λ¬ κ°λ€.
3. 1μ΄ λ°κ²¬λ λκΉμ§ νλ ¬μ λ΄λ €κ°λ€.
4. λ§μ§λ§ ν λλ μ΄μ λ§λ λκΉμ§ μ 2, 3 λ¨κ³λ₯Ό λ°λ³΅νλ€.
5. 1μ κ°μ₯ λ§μ΄ κ°μ§ νμ κ°λ‘μ§λ₯Έ λ§μ§λ§ νμ΄λ€.
μ΄λ₯Ό κ·Έλ¦ΌμΌλ‘ νννλ©΄ λ€μκ³Ό κ°λ€.

#μ λ ₯ μμ
8 β¦ n = 8 (8 Γ 8 νλ ¬)
1 1 1 1 0 0 0 0 β¦ κ° λΉνΈλ 곡백μΌλ‘ ꡬλΆ
1 1 1 1 1 0 0 0
1 0 0 0 0 0 0 0
1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 0
1 1 1 1 1 0 0 0
#μΆλ ₯ μμ
6 // 1μ΄ κ°μ₯ λ§μ ν λ²νΈ : 6
#Fast Version
def mostOnesFast(A,n):
i=0 #νλ²νΈ
j=0 #μ΄λ²νΈ
row=0 #μ΅λ 1κ°μ νλ²νΈ
while((i<n)&(j<n)): # n x n νλ ¬μμ νκ³Ό μ΄μ΄ nλ³΄λ€ μμ λ
if A[i][j] ==1: # λ§μ½ ν΄λΉ μμκ° 1μ΄λ©΄/
j+=1 # μ΄λ°©ν₯μΌλ‘ 1μΆκ°
row = i #ν μ
λ°μ΄νΈ
else:
i +=1 #ν΄λΉ μμκ° 0μ΄λ©΄ 1ν μΆκ°
return row
iμ jλͺ¨λ 컀μ§λ μ±ν₯μ κ°μ§κ³ μκ³ , 0μ λ§λ¬μ λ νμ μΆκ°ν΄μ£ΌκΈ°λ§ νλ©΄ λλ€. κ·Έλ¬λ©΄ μμ°μ€λ½κ² κ°μ₯ λ§μ΄ ν¬ν¨νκ³ μλ νμ μ°Ύμ μ μλ€.
λ¬Έμ 3 - λμ νκ·
μμ λ°μ΄ν°κ°λ€λ‘ ꡬμ±λ λ°°μ΄ Xμ i-λ²μ§Έ λμ νκ· (prefix average)μ΄λ Xμ i-λ²μ§Έμ μ΄λ₯΄κΈ°κΉμ§μ (i + 1)κ° μμλ€μ νκ· μ΄λ€. μ¦, A[i] = (X[0] + X[1] + β¦ + X[i])/(i + 1) λμ νκ· μ κ²½μ , ν΅κ³ λΆμΌμμ μ€λ₯΄λ΄λ¦Ό λ³λμ μνμν΄μΌλ‘μ¨ λλ΅μ μΆμΈλ₯Ό μ»μ΄λ΄κΈ° μν΄ μ¬μ©λλ€. μΌλ‘λ‘ λΆλμ°, μ£Όμ, νλ λ±μλ μμ£Ό νμ©λλ€.. μ΄ λ¬Έμ λ λ°°μ΄ Xμ λμ νκ· (prefix average) λ°°μ΄ Aλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ ꡬννκ³ ν μ€νΈνλλ° κ΄ν κ²μ΄λ€.
# Slow Version
def prefixAverages1(X,n):
A = []
for i in range(n):
sum=0
for j in range(i+1):
sum = sum + X[j]
avg = sum/(i+1)
A.append(int(sum / (i+1)))
return A
n=3
X = [5,1,9]
A = prefixAverages1(X,n)
print(A)
μ ν¨μλ₯Ό μ΄ν΄λ³΄λ©΄ i λ²μ§Έ μΈλΆ λ°λ³΅μμλ, λ°λ‘ μ iβ 1λ²μ§Έ λ°λ³΅μμ ꡬνλ [0 ~ i β 1]μ ν©μ, i + 1 λ²μ§Έ μμ κ° ν κ°λ§μ λν΄ νμ¬ ν©μ μ»μ΄ νκ· μ ꡬνλ€. λ°λΌμ μ΄λ₯Ό μμ νμ¬ μ΄μ μ i β 1λ²μ§ΈκΉμ§μ ν©μ 보κ΄νμ¬λ€μ λ°λ³΅μΌλ‘ μ λ¬νλ λ°©μμΌλ‘ λ°λ³΅νλ€λ©΄ νμ¬ ν©μ ꡬνλλ° νμν μκ°μ λ¨μΆν μ μλ€λ κ²μ μ μ μλ€. μ΄λ κ² μ€κ° ν©μ 보κ΄νλ λ°©μμΌλ‘ μκ³ λ¦¬μ¦μ κ°μ ν ν¨μ prefixAverage2λ λμ νκ· κ°λ€μ μ ν μκ°μ ꡬν μ μκ² λλ€.
# Fast Version
def prefixAverages2(X,n):
A = []
sum=0
for i in range(n): # μμκ°―μλ§νΌ λ°λ³΅ν¨
sum = sum + X[i]
A.append(int(sum / (i+1)))
return A
n=3
X = [5,1,9]
A = prefixAverages2(X,n)
print(A)