[codility] Lv2- OddOccurrencesInArray,Lv3-TapeEquilibrium ,TapeEquilibrium
νλ‘κ·Έλλ¨Έμ€ λ¬Έμ μλ§ μμ‘΄νλν°λΌ, coldility λΌλ μλ‘μ΄ μ½λνμ΄ νλ«νΌμ μκ² λμκ³ ,
λ¬Έμ λ₯Ό μ΄μ¬ν νμ΄λ³΄κΈ°λ‘ κ²°μ¬νλ€.
λ¬Έμ λ₯Ό νμ΄νλ©΄μ μ²μμΌλ‘ λλ κ²μ μ½λμ ν¨μ¨μ±μ μ κ²½μ¨μΌ νλ κ²
κ·Έλμμ κ·Έλ κ² ν¨μ¨μ±μ λν΄μ κΉκ² μκ°ν΄λ³΄μ§ λͺ»νμ§λ§,
ν¨μ¨μ±μ΄ μ’μ§μκ±°λ μ§λμΉ λ°λ³΅λ¬Έμ΄ κ³μλλ μ½λλ.... scoreμμ κΉμ΄κ² λλ€...
λ¬Έμ λ₯Ό νλ©° λ°°μ΄ μ
1. μμΈμ²λ¦¬λ₯Ό ν΄μΌνλ€.
2. μ λ ₯κ°μ λ²μ ν¬κΈ°λ₯Ό μμμΌ νλ€.
3. μμ볡μ‘λμ λν κ³ λ―Όμ νμ (https://rrecoder.tistory.com/63)
π 2- OddOccurrencesInArray
λ°°μ΄μμ μμ κ³Ό μ€λ³΅ν κ°μ κ°μκ° νμμΈ κ°μ return νλ λ¬Έμ
첫 νμ΄
def solution(A):
cntDic={}
for i in A:
if i not in cntDic:
cnt=0
for j in A:
if j==i:
cnt+=1
cntDic[i]=cnt
for num,cnt in cntDic.items():
if cnt%2==1:
return num
1) cnt λμ λ리 μμ±
2) λμ λ리μ μμ§ μμΌλ©΄ ν΄λΉ κ°μ forλ¬Έμ λλ©° μ°Ύμμ λν΄μ€
3) κ·Έ λμ λ리λ₯Ό λ€μ λλ©° κ°μκ° νμμΈ κ°μ λν΄μ€


κ²°κ³Όλ μ²μ°Ένλ€.
μΌλ¨ bigNumberλ₯Ό μ ν μ κ²½μ°μ§ μμλ ν°μ΄κΈ°μ μ±λ₯ν μ€νΈμμ μ λΆ λΉ΅μ !
μΌλ¨ Detected time complexity:O(N**2) γΉμ¦ μκ°λ³΅μ‘λ νκ³κ° O(N**2)μΈλ°
forλ¬Έ μμμ if λ¬Έμ ν΅ν΄ λ°°μ΄μ νμνλ κ² N^2
κ·Όλ° λλ for λ¬Έ μμμ if λ¬Έ μμμ for λ¬Έ ?
λ€λ₯Έ νμ΄
def solution(A):
if len(A) ==1:
return A[0]
A = sorted(A)
for i in range(0,len(A),2):
if i+1 == len(A):
return A[i]
if A[i]!=A[i+1]:
return A[i]
μκ°λ³΅μ‘λ : O(N) or O(N*logN)
sortedμ μκ°λ³΅μ‘λ : O(N*logN)
μ λ ¬λ λ°°μ΄μ λ°λΌ λκ°μ© for λ¬Έμ λλ©° λ€μ κ°κ³Ό λ€λ₯΄λ©΄ !
μ°Έκ³ :https://wayhome25.github.io/algorithm/2017/04/30/OddOccurrencesInArray/
π STEP 3-1 ) FrogJump
λ΄ νμ΄ (100%)
def solution(X, Y, D):
Y-=X
if Y%D ==0:
return Y//D
else:
return Y//D+1
κ°κ΅¬λ¦¬κ° λͺ©ν μ§μ κΉμ§ κ°λ μ΅μ νμλ₯Ό ꡬνλ λ¬Έμ μΈλ° ,
μκ°μ μ‘°κΈ ν΄λ³΄λ μ½κ² ν μ μμλ€..
π STEP 3-2 ) PermMissingElem
λ΄ νμ΄(50%)
def solution(A):
if len(A)==1:
return A[0]
A=sorted(A)
for idx in range(1,len(A)+1):
if A[idx]-1 != A[idx-1]:
return A[idx]-1
1) Aλ₯Ό μ λ ¬ν ν
2) Aλ₯Ό λλ©° νμ¬ κ°+1 κ³Ό λ€μκ°μ΄ κ°μ§ μμΌλ©΄
3) νμ¬κ°+1μ΄μλκ²μ΄λ return
νλ λ°©λ²μΌλ‘ νμ΄νλλ° μ€λ΅μ΄ λμλ€.
λ°νμ μλ¬κ° λμ€λκ±Έ 보λ μμ²λκ² λ§μ λ²μμ μλ₯Ό κ°μ§κ³ μλ λ°°μ΄μ μ λ ¬νκΈ° λλ¬Έμ λΆκ°λ₯ν κ² κ°λ€.
κ³ λ‘ μ λ ¬μ νμ§ μμμΌ νλ€!
λ€λ₯Έ νμ΄
def solution(A):
idxArr= [0]* (len(A)+1)
for i in A:
idxArr[i-1]=1
return idxArr.index(0)+1
1) Aμ μΈλ±μ€ λ°°μ΄μ μμ±
2) Aλ₯Ό λλ©° Aμ κ°μ μΈλ±μ€λ‘ μ¬μ©
idxArr = [1,1,1,0,1] μ΄ κ°μ΄ λλ©΄μ μ±μμ§μ§ μμ λΆλΆμ idx+1 κ°μ΄ λ΅μ΄ λλ€.
λ€λ₯Ένμ΄
def solution(A):
return sum(range(len(A)+2)) - sum(A)
[1,2,3,5] 15-11 = 4 κ° λμ€λλ°
[0,1,2,3,4,5] - [1,2,3,5] λΌκ³ λ³Ό μ μλ€.
π STEP 3-3 ) TapeEquilibrium
λ΄ νμ΄1 ( 53% )
def solution(A):
sumArr=[]
length=len(A)
for i in range(1,len(A)):
sumArr.append(abs(sum(A[:i])-sum(A[i:length])))
return min(sumArr)
1) λ°λ³΅λ¬Έμ λλ©° ν΄λΉ μ«μμ λ²μκΉμ§ slicingν λ°°μ΄μ ν©κ³Ό μ°¨λ₯Ό ꡬνλ€
2) κ·Έ κ°μ sumArrμ λ£κ³ μ΅μ’ κ° κ΅¬νκΈ°
μλ§ minκ°μ ꡬνλ λΆλΆμμ λ§μ μκ°μ μμνκ²μΌλ‘ μμνλ€.
μκ°λ³΅μ‘λ νκ³λ = O(N * N)

μμ λͺ¨λ λ λͺ¨λ μκ° λλ Έλ€..
λ€λ₯Έ νμ΄
def solution(A):
firstSum=0
lastSum=sum(A)
minSum=None
for i in range(1,len(A)):
firstSum +=A[i-1]
lastSum-=A[i-1]
diff = abs(firstSum-lastSum)
if minSum==None:
minSum = diff
else:
minSum = min(minSum,diff)
return minSum
λμ λ€λ₯Έ μ (μ¦ μ΄λμμ μκ°μ κ°μμμΌ°λ.)
1) Sumμ νλ²λ§ νλ€
κ·Έ ν λ°λ³΅λ¬Έμ λλ©° μμΉμ λ°λ₯Έ κ°μ λνκ³ λΉΌμ€λ€
2) minμ νμμ μν΄ νμ§λ§ λ§μ κ°λ€μ νλ²μ λ£μ ν νμ§ μκ³ κ·Έλκ·Έλ μμ λ²μλ‘ νλ€.