여름의 서재
[프로그래머스] 위클리 챌린지_10주차_교점에 별 만들기 본문
728x90
📕 문제
https://programmers.co.kr/learn/courses/30/lessons/87377?language=python3
💡 풀이법
1. combinations을 써서 각 직선들의 조합마다 교점을 구해준다.
2. min_x, min_y, max_x, max_y는 교점중 제일 작고 큰 x,y 좌표를 담을 변수이다.
2. 교점의 x, y 좌표가 둘다 정수라면 point 리스트에 담아준다.
3. min_x, min_y, max_x, max_y를 갱신 시켜준다.
4. 격자판을 만들고, 교점들을 좌표이동해준 후 해당 위치를 '*'로 바꿔준다.
from itertools import combinations
def solution(line):
point = []
min_x = min_y = float('inf')
max_x = max_y = float('-inf')
for item in combinations(line, 2):
A, B, E = item[0]
C, D, F = item[1]
if A*D == B*C:
continue
px = (B*F-E*D)/(A*D-B*C)
py = (E*C-A*F)/(A*D-B*C)
if not px % 1 and not py % 1:
px, py = int(px), int(py)
point.append((px, py))
min_x = min(min_x, px)
max_x = max(max_x, px)
min_y = min(min_y, py)
max_y = max(max_y, py)
matrix = [['.' for _ in range(max_x-min_x+1)] for _ in range(max_y-min_y+1)]
for p in point:
x, y = p[0] - min_x, max_y - p[1]
matrix[y][x] = '*'
answer = []
for m in matrix:
answer.append(''.join(m))
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 압축 (0) | 2021.11.07 |
---|---|
[프로그래머스] 위클리챌린지_12주차_피로도 (0) | 2021.11.07 |
[프로그래머스] 입국심사 (이분탐색) (0) | 2021.10.06 |
[프로그래머스] 위클리 챌린지_9주차_전력망을 둘로 나누기 (0) | 2021.10.06 |
[프로그래머스] 위클리 챌린지_8주차_최소직사각형 (0) | 2021.09.29 |
Comments