교점에 별 만들기
직선 A, B, C에 대한 정보가 담긴 배열 line이 매개변수로 주어집니다. 이때 모든 별을 포함하는 최소 사각형을 return 하도록 solution 함수를 완성해주세요.
별 알고리즘 없는 구현인데 망할 줫나 오래걸림 다시풀어보는 건데도 (정답률이 낮은건 이유가 있다니까 -0-)
풀고도 좀더 이쁘게 정리, 빠르게 고친다고 그런걸거야..
구현이 개딸림 다시풀었는데도 이전의 코드와 속도차이에서는 별 차이가 별로 없었음. 쪼꿈 더 빠르고, 깔끔해진 정도?
근데 다른 사람풀이가 코드도 깔끔하고 속도도 더 빠르길래 참고(뺏김)함.
def solution(line):
answer = []
coord = []
len_ = len(line)
maxX,minX,maxY,minY = -10e10, 10e10, -10e10, 10e10
for i in range(len_):
for j in range(i,len_):
A,B,E = line[i]
C,D,F = line[j]
tmp = A*D-B*C
if tmp != 0:
x,y = (B*F-E*D)/tmp, (E*C-A*F)/tmp
x_ ,y_ = int(x) ,int(y)
if x ==x_ and y == y_:
maxX,minX,maxY,minY = max(maxX,x_),min(minX,x_),max(maxY,y_),min(minY,y_)
coord.append((x_,y_))
print(coord,maxY, minX)
answer = [["." for c in range(maxX-minX+1)] for r in range(maxY-minY+1)]
for x, y in coord: answer[maxY-y][x-minX] = "*"
return ["".join(row) for row in answer]
옛~날 코드
# 2차원 배열 set 시키고 싶으면 튜플로 저장하고 해야함 list (x)
# 'float' object is not subscriptable
# 위 에러는 list 가 아닌 변수에 인덱스로 접근할 경우 뜨는 에러
def solution(line):
answer = []
cd = []
x = [1e15,-1e15]
y = [1e15,-1e15]
for i in range(len(line)):
for j in range(i,len(line)):
try:
x_ = (line[i][1]*line[j][2] - line[i][2]*line[j][1])/(line[i][0]*line[j][1] - line[i][1]*line[j][0])
y_ = (line[i][2]*line[j][0] - line[i][0]*line[j][2])/(line[i][0]*line[j][1] - line[i][1]*line[j][0])
if x_ !=0 and y_!= 0:
if x_%int(x_) ==0 and y_%int(y_) ==0: cd.append((int(x_),int(y_)))
elif x_ ==0 and y_!= 0:
if y_%int(y_) ==0: cd.append((int(x_),int(y_)))
elif x_ !=0 and y_== 0:
if x_%int(x_) ==0: cd.append((int(x_),int(y_)))
else: cd.append((int(x_),int(y_)))
except: continue
cd = list(set(cd))
for i in cd:
if x[0] > i[0]: x[0] = i[0]
if x[1] < i[0]: x[1] = i[0]
if y[0] > i[1]: y[0] = i[1]
if y[1] < i[1]: y[1] = i[1]
for i in range(y[1],y[0]-1,-1):
answer.append('')
for j in range(x[0],x[1]+1):
if (j,i) in cd:
cd.remove((j,i))
answer[-1] += "*"
else: answer[-1] += "."
return answer