알고리즘/프로그래머스
[위클리 챌린지] 교점에 별 만들기
래울
2021. 11. 4. 21:12
https://programmers.co.kr/learn/courses/30/lessons/87377?language=python3
코딩테스트 연습 - 교점에 별 만들기
[[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] [[0, 1, -1], [1, 0, -1], [1, 0, 1]] ["*.*"] [[1, -1, 0], [2, -1, 0], [4, -
programmers.co.kr
1. 모든 교점을 구한다.
- 나누는 수가 0일경우, 결과값이 소수가 나올경우 제외
- is_integer() 사용, 정수값이면 True를 반환
2. x, y에 대한 최소, 최대 값을 구한다.
- 좌표의 범위는 x1 ~ x2, y1 ~ y2
3. 해당 좌표의 범위에 맞게 *과 .를 찍어준다.
- y좌표는 위에서 아래로 그리기 때문에 역순으로 for문을 돌림
def solution(line):
temp = []
for i in range(len(line)):
for j in range(i+1, len(line)):
d = line[i][0]*line[j][1]-line[i][1]*line[j][0]
if d == 0:
continue
x = (line[i][1]*line[j][2]-line[i][2]*line[j][1])/d
y = (line[i][2]*line[j][0]-line[i][0]*line[j][2])/d
if x.is_integer() and y.is_integer():
temp.append([int(x), int(y)])
dots = []
for i in temp:
if not i in dots:
dots.append(i)
x_sort = sorted(dots, key = lambda x : x[0])
y_sort = sorted(dots, key = lambda x : x[1])
x1, x2 = x_sort[0][0], x_sort[-1][0]
y1, y2 = y_sort[0][1], y_sort[-1][1]
answer = []
for i in range(y2, y1-1, -1):
line = ""
for j in range(x1, x2+1):
if [j, i] in dots:
line += '*'
else:
line += '.'
answer.append(line)
return answer