๐ 4-1) - FrogRiverOne
์ฃผ์ด์ง 1๋ถํฐ ์ฃผ์ด์ง X๊ฐ์ด ๋์จ ๊ฐ์ฅ ๋น ๋ฅธ idx๋ฅผ ๊ตฌํ๋ ๋ฌธ์
์ฒซ ํ์ด (54%)
def solution(X, A):
idArr = [0]*X
for i in range(len(A)):
idArr[A[i]-1]=1
if sum(idArr)==X:
return i
return -1
1) idArr ์์ฑ
2) A๋ฅผ ๋๋ฉฐ ํด๋น ๊ฐ์ idx๋ก ๋ฃ์ด์ค
3) idArr๊ฐ ๋ค ์ฐผ์ ๋ return
์ญ์๋ ์๊ฐ๋ณต์ก๋๋ก ์ธํ์ฌ ์ ์๋ฅด ๋ฐ์ด๋ ๊น์๋ค.
์ ํ ์๊ฐ๋ณต์ก๋๋ O(N ** 2)
์ด๋ฏธ for + if์ ์กฐํฉ์ผ๋ก N^2์ด ๋์ด์์๊ณ
๊ทธ์์์ sum์ฐ์ฐ๊น์ง ํ๊ธฐ ๋๋ฌธ์ ๋ชจ์๋ผ๊ณ sum์ ์์ ์ผ ํ๋ค!!
๋ค๋ฅธ ํ์ด (100%)
def solution(X, A):
idArr = [0]*X
idSum=0
for i in range(len(A)):
if idArr[A[i]-1]==0:
idArr[A[i]-1]=1
idSum+=1
if idSum==X:
return i
return -1
์ญ์๋ sum์ ์์ ๋ ํด๊ฒฐ
๊ฐ์ ํ์ 1) ์ด์ฐจํผ for ์์ if๊ฐ ์์๊ฑฐ๋ฉด ์ฐ์ฐ ์์ฒด๋ ์กฐ๊ฑด์ ํด๋นํ ๋๋ง ํ๊ฒ ํจ
๊ฐ์ ํ์ 2) ๋ฐ๋ณต๋ฌธ์ ๋ ๋๋ง๋ค Sum์ ํ์ง ์๊ณ idSum์ ๋ง๋ค์ด ๋ง์กฑํจ์ ํ์ธ
๐ 4-2) - MaxCounter
๋ด ํ์ด (55%)
def solution(N, A):
ans=[0]*N
for num in A:
if 1<= num <=N:
ans[num-1]+=1
else :
maxNum = max(ans)
ans=[maxNum]*N
return ans
1) A๋ฅผ ๋๋ฉฐ ์กฐ๊ฑด์ ๋น๊ตํ๋ค.
2) ๊ทธ ์ซ์๊ฐ N+1 ์ด๋ฉด ๊ทธ ๋น์์ max๊ฐ์ผ๋ก ์ ์ฒด ans ๋ณ๊ฒฝ
3) ๊ทธ๊ฒ ์๋๋ฉด ํด๋น ๊ฐ์ ์ธ๋ฑ์ค๋ก ํด ans ๋ณ๊ฒฝ
๋ค๋ฅธ ํ์ด (100%)
def solution(N, A):
counters = N * [0]
nextMax = maxNum = 0
for i in A:
if i <= N:
curr = counters[i-1] = max(counters[i-1] +1, maxNum+1)
nextMax = max(curr,nextMax)
else:
maxNum =nextMax
return [c if c > maxNum else maxNum for c in counters]
nextMax: ๋งค ์ํฉ์ max ๊ฐ
maxNum: ์กฐ๊ฑด์ด N+1์ผ ๋์ max ๊ฐ
๋๋ ์กฐ๊ฑด์ด N+1์ผ๋ ans ์ ์ฒด๋ฅผ ๋งค๋ฒ ans=[maxNum]*N ๋ค์๋ง๋ค๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๋ง์ด ์์๋๋ ๋ฐ๋ฉด์
์กฐ๊ฑด์ด N+1์ด๋์ฌ ๋น์์ max๊ฐ์ ์ ์ฅํด ๋๊ณ
๋ฃ์ด์ค๋๋ง๋ค ๊ทธ max+1 ๊ฐ๊ณผ ๋ฃ์ด์ค ๊ฐ(+1) ์ ๋น๊ตํด ๋ฃ์ด์ฃผ๊ณ
๋ง์ง๋ง์ ํ๋ฒ๋ ํ์ํ์ง ์์ index ๋ง ๋ง์ง๋ง max๊ฐ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
๐ ์๊ฐ๋ณต์ก๋๋ฅผ ์ํด ์ด๋ ๊ฒ ์ ๊ฒฝ์ด ์ฝ๋๋ฅผ ์งค ์ ์๋ค๋ ๊ทธ ๋ ผ๋ฆฌ๋ ฅ์ ๋๋๋ค.
ํต์ฌ์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ๊ทธ ์กฐ๊ฑด์ ๋ง์ฃผํ์ ๋์ ๋์(์ ์ฒด๋ค ๋ฐ๊ฟ์ฃผ๊ธฐ) ์ ์์ด๋ค๋ ๊ฒ์ด๋ค.
๐ 4-3) MissingInteger
๋ฐฐ์ด์ด ์ฃผ์ด์ก์ ๋ ๋์ค์ง ์์ ๊ฐ์ฅ ์์ ์ ์๋ฅผ return
์์์ผ๋ 1, ๋์ค์ง ์์๊ฒ ์์๋ max +1
์ฒซ ํ์ด
def solution(A):
A=list(filter(lambda x: x>0, A))
A.sort()
smallNum=1
changeCnt=0
if len(A)==0:
return 1
for i in range(len(A)-1):
if A[i]+1!=A[i+1]:
smallNum = A[i]+1
changeCnt+=1
if changeCnt==0:
return max(A)+1
else:
return smallNum
1) A์์ ์์ ํํฐ๋ง
2) A ๋ฐฐ์ด์ด ๋น์์ผ๋ฉด 1 ๋ฆฌํด
3) A ๋ฐฐ์ด์ ๋๋ฉฐ ์ฐ์์ ์ด์ง ์์ ์๋ฅผ ๊ณ์ smallNum์ ๋ฃ์ด์ค
4) ํ๋ฒ๋ ๋ฐ๋์ง ์์ (์ฆ ์ฐ์์ ์ธ) ๊ฐ์ max+1
๊ฒฐ๊ณผ๋ ์ฒ์ฐธ!
์์ธ์ฒ๋ฆฌ ์ํ ๋ถ๋ถ๊ณผ ์ฑ๋ฅ๋ฉด์์ ๋ฎ์์ก๋ค.
๋ค๋ฅธ ํ์ด
def solution(A):
A=list(set(A))
A.sort()
smallNum=1
for i in A:
if smallNum ==i:
smallNum+=1
return smallNum
smallNum์ 1๋ก ์ก์๋๊ณ A๋ฅผ ๋๋ฉฐ ๋น๊ตํ๋ค
์ด ๋ก์ง์ ๋ชจ๋ ํ ์คํธ์ผ์ด์ค๋ฅผ ๋ง์กฑํ๋ค.
์์๋ง ์๋ ๊ฒฝ์ฐ : return 1
์ฐ์ํ๋ ์๊ฐ ๋ค ์๋๊ฒฝ์ฐ : return max+1
๋น ์ง๋ ์๊ฐ ์๋๊ฒฝ์ฐ : ์ฐ์ํ์ง ์์ ๋ถ๋ถ์์ ๋ฉ์ถ ๊ฐ (์ ์ผ์์ ๋์ค์ง ์์ ๊ฐ)
์ฐธ๊ณ :https://sooho-kim.tistory.com/33
'๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์ฝ๋ค] ๊ธฐ์ถ๋ฌธ์ - ๊ทธ๋ฆฌ๋ (0) | 2021.08.25 |
---|---|
[์ด์ฝ๋ค] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2021.08.23 |
[์ด์ฝ๋ค] ์ ๋ ฌ & ์ด์งํ์ ์ค์ ๋ฌธ์ (0) | 2021.07.28 |
[์ด์ฝ๋ค] ๊ทธ๋ฆฌ๋ค & ๊ตฌํ ์ค์ ๋ฌธ์ (0) | 2021.07.23 |
[codility] Lv2- OddOccurrencesInArray,Lv3-TapeEquilibrium ,TapeEquilibrium (0) | 2021.06.21 |
๋๊ธ