def solution(clothes):
dic={}
c = 1
# ["yellowhat", "headgear"] 이러한 items를 읽어옴
for items in clothes:
if items[1] in dic: # "headgear"가 이미 dic={} 안에 있다면
dic[items[1]] += 1 # "headgear": +1
else: # "headgear"가 처음 나왔다면
dic[items[1]] = 1 # "headgear" : 1
#print(dic) #결과 {'headgear': 2, 'eyewear': 1}
for v in dic.values(): # 여기서 2, 1을 의미
c = c* (v+1) # 안 쓴 경우까지 고려하기 위해 v+1
# ex. headgear의 경우 "yellowhat", "bluesunglasses", "안 씀" (총 3가지)
#for k, v in dic.items(): #(참고) 이렇게 key,value 이용 가능
# print(k," ",v)
return c-1 # 최소 한 개 이상은 입음. 다 안 입는 경우 -1
# box1의 a점(ax,ay), box1의 b점(bx,by)
ax,ay=0,0
bx,by=0,0
# box2의 c점, d점
cx,cy=0,0
dx,dy=0,0
def point(ax,ay,bx,by,cx,cy,dx,dy):
if((ax,ay)==(dx,dy) or (bx,by)==(cx,cy) or (bx,ay)==(cx,dy) or (ax,by)==(dx,cy)) :
return True
else:
return False
def line(ax,ay,bx,by,cx,cy,dx,dy):
# 꼭짓점 하나 일치
if(((bx,by)==(cx,dy) and by>cy) or (((bx,ay)==(cx,cy) and dy>ay))
or((dx,cy)==(ax,ay) and by>cy) or ((dx,dy)==(ax,by) and dy>ay)
# 변 일치
or ((bx,by)==(cx,dy) and (bx,ay)==(cx,cy)) or ((ax,ay)==(dx,cy) and (dx,dy)==(ax,by))
or ((cx, cy) == (ax, by) and (bx, by) == (dx, cy)) or ((ax, ay) == (cx, dy) and (dx, dy) == (bx, ay))
# 그 사이(a,b의 한 변에 c,d가 겹침)
or (ax==dx and (ay<cy<by or ay<dy<by)) or (bx==cx and (ay<cy<by or ay<dy<by))
or (by==cy and (ax<cx<bx or ax<dx<bx)) or (ay==dy and (ax<cx<bx or ax<dx<bx))
# 그 사이(c,d의 한 변에 a,b가 겹침)
or (ax == dx and (cy < ay < dy or cy < by < dy)) or (bx == cx and (cy < ay < dy or cy < by < dy))
or (by == cy and (cx < ax < dx or cx < bx < dx)) or (ay == dy and (cx < ax < dx or cx < bx < dx))
# 내부 한 변 일치(ab안에 cd)
# or (ay==cy and ax<cx<bx and ax<dx<bx and ay<dy<by) or (ax==cx and ay<cy<by and ay<dy<by and ax<dx<bx)
# or (by==dy and ax<cx<bx and ax<dx<bx and ay<cy<by) or (bx==dx and ay<cy<by and ay<dy<by and ax<cx<bx)
# 내부 한 변 일치(cd안에 ab)
# or (ay==cy and cx<ax<dx and cx<bx<dx and cy<by<dy) or (ax==cx and cy<ay<dy and cy<by<dy and cx<bx<dx)
# or (by==dy and cx<ax<dx and cx<bx<dx and cy<ay<dy) or (bx==dx and cy<ay<dy and cy<by<dy and cx<ax<dx)
):
return True
else:
return False
def null(ax,ay,bx,by,cx,cy,dx,dy): #cy>by or ay>dy
#dx<ax or bx<cx or min(cy,dy)>max(ay,by) or min(ay,by)>max(cy,dy)
#우,좌,상,하 바깥에서 안 접할 때
if(bx<cx or dx<ax or by<cy or dy<ay):
return True
#안에서 안 접할 때
elif(bx-ax<dx-cx and by-ay<dy-cy and (cx<ax<dx and cx<bx<dx) and (cy<ay<dy and cy<by<dy)): #속에 들어감
return True
elif(bx-ax>dx-cx and by-ay>dy-cy and (ax<cx<bx and ax<dx<bx) and (ay<cy<by and ay<dy<by)): #속에 들어감
return True
else:
return False
# main 함수
ax,ay,bx,by=map(int,input().split())
cx,cy,dx,dy=map(int,input().split())
if(line(ax,ay,bx,by,cx,cy,dx,dy)):
print('LINE')
elif (point(ax,ay,bx,by,cx,cy,dx,dy)):
print('POINT')
elif(null(ax,ay,bx,by,cx,cy,dx,dy)):
print('NULL')
else:
print('FACE')
[ 코드 ] **하노이탑 파이썬 - 시간초과가 떴다면** print(count) 대신print(2**n - 1) 를 해라! -> 하노이탑의 총 옮긴 횟수는 2^n - 1으로 정해져 있다. (하지만 개인적으로 옮길 때 마다 count를 증가시켜서 총 count를 출력하는 게 맞다고 생각한다. 근데 그렇게 하면 시간 초과가 된다..)
import sys input=sys.stdin.readline n = int(input()) #count = 0 #옮긴 횟수 #ans='' def hanoi(disk_num,from_peg,to_peg,tmp_peg): global count,ans if(disk_num==1): print(from_peg,to_peg) # ans += '{} {}\n'.format(from_peg,to_peg) # count += 1 return hanoi(disk_num-1,from_peg,tmp_peg,to_peg) print(from_peg,to_peg) # ans += '{} {}\n'.format(from_peg, to_peg) # count += 1 hanoi(disk_num-1,tmp_peg,to_peg,from_peg) print(2**n - 1) #count를 하니 시간 초과 뜸 # (처음)1 에서 (최종)3으로 이동함 # 2는 거치는 곳일 뿐! hanoi(n,'1','3','2') #print(count) #print(ans)
[ 결과 ] 와.. 진짜 시간초과 너무한거 아니냐고.... 몇 번을 시도해서 결국 통과되었다.. 너무해..
댓글을 달아 주세요