[7주차_입실 퇴실]-[위클리챌린지]
My answer-시간초과
def solution(enter, leave):
answer = [0]*len(enter)
n=len(enter)
for i in range(1,n+1):
for j in range(1,n+1):
if(i!=j):
etmpi, etmpj=enter.index(i),enter.index(j)
ltmpi, ltmpj=leave.index(i), leave.index(j)
if(etmpi>etmpj and ltmpi<ltmpj):
answer[i-1]+=1
elif(etmpi<etmpj and ltmpi>ltmpj):
answer[i-1]+=1
# 둘이 붙어있는데, 둘보다 늦게 들어 온 애가 얘네보다 먼저 나갈 경우
elif(etmpi<etmpj):
for k in range(1,n+1):
if(enter.index(k)>etmpj and leave.index(k)<ltmpi):
answer[i-1]+=1
answer[j-1]+=1
break
return answer
Another answer
def solution(enter, leave):
answer = [0]*len(enter)
stack=[]
for i in range(len(enter)):
stack.append(enter[i])
for j in range(len(stack)):
if(j==len(stack)-1):
answer[stack[j]-1]+=len(stack)-1
else: answer[stack[j]-1]+=1
while(len(leave)!=0):
if(leave[0] in stack):
stack.remove(leave[0])
leave.remove(leave[0])
else:
break
return answer
더보기
내 코드는 그냥 경우의 수를 모두 생각하면서 풀어서 시간초과가 떴는데, 아래코드는 아예 방법을 다르게 풀었다.
무조건 만나는 경우를 세야하기 때문에 퇴실했을 수도 있고 안했을 수도 있을 때는 무조건 퇴실시켜서 계산하는 것이다.
[9주차]-[위클리챌린지]
My answer- 아직 못품
def solution(n, wires):
stack1,stack2=set(),set()
# 각각 이어진 놈들을 계산?
array=[[i+1,0] for i in range(n)]
for i in wires:
for j in i:
array[j-1][1]+=1
array.sort(key=lambda x:-x[1])
print("array=",array)
for i in range(1,len(array)):
if([array[0][0],array[i][0]] in wires):
wires.remove([array[0][0],array[i][0]])
break
elif ([array[i][0],array[0][0]] in wires):
wires.remove([array[i][0],array[0][0]])
break
print("wires=",wires)
for j in range(len(wires)):
if(array[i][0] in wires[j]):
stack1.add(wires[j][0])
stack1.add(wires[j][1])
elif(array[0][0] in wires[j]):
stack2.add(wires[j][0])
stack2.add(wires[j][1])
elif(wires[j][0] in stack1 or wires[j][1] in stack1):
stack1.add(wires[j][0])
stack1.add(wires[j][1])
elif(wires[j][0] in stack2 or wires[j][1] in stack2):
stack2.add(wires[j][0])
stack2.add(wires[j][1])
print(stack1,stack2)
return (abs(len(stack1)-len(stack2)))
728x90
반응형
'코딩테스트 > 프로그래머스[Fail]' 카테고리의 다른 글
[프로그래머스] 09/30 (1/3) (0) | 2021.09.30 |
---|---|
[프로그래머스] 09/25 (2) (0) | 2021.09.25 |