프로그래머스 교점에 별 만들기 코드 및 해설 (파이썬)
2021. 10. 13. 18:08ㆍalgorithm
반응형
https://programmers.co.kr/learn/courses/30/lessons/87377
문제에 제시된 참고사항을 참고해 두 직선의 모든 좌표가 정수인 교점을 구하는 함수 intersection_point를 만들었다.
solution 함수에선 입력으로 주어진 모든 직선을 2개씩 짝지어 교점을 구하고, 이들을 points라는 집합에 저장했다. 각 교점의 x좌표의 최대, 최솟값과 y좌표의 최대, 최솟값을 구해 최종 반환값의 크기를 파악했다. 이 크기에 맞게 우선 . 으로 초기화하고, 각 점을 하나씩 확인하면서 해당하는 위치에 *을 그려준다.
from itertools import combinations
# 두 직선의 모든 좌표가 정수인 교점 구하기
def intersection_point(line1, line2):
a,b,e = line1
c,d,f = line2
if a*d == b*c:
return None
x = (b*f-e*d)/(a*d-b*c)
y = (e*c-a*f)/(a*d-b*c)
if x == int(x) and y == int(y):
return (int(x),int(y))
def solution(line):
N = len(line)
# 두 직선씩 짝지어 교점 구하기
combs = list(combinations(line,2))
points = set()
for comb in combs:
point = intersection_point(comb[0], comb[1])
if point:
points.add(point)
# 교점의 x좌표들
xs = [p[0] for p in points]
x_min = min(xs)
x_max = max(xs)
# 교점의 y좌표들
ys = [p[1] for p in points]
y_min = min(ys)
y_max = max(ys)
# 모두 . 으로 초기화
answer = ['.' * (x_max-x_min+1)] * (y_max-y_min+1)
# 각 좌표마다 * 그리기
for point in points:
x,y = point
answer[y_max-y] = answer[y_max-y][:x-x_min] + '*' + answer[y_max-y][x-x_min+1:]
return [''.join(ans) for ans in answer]
반응형
'algorithm' 카테고리의 다른 글
백준 1로 만들기 코드 및 해설 (파이썬) (0) | 2021.10.28 |
---|---|
프로그래머스 위클리 챌린지 피로도 코드 및 해설 (파이썬) (0) | 2021.10.26 |
백준 부분수열의 합 코드 및 해설 (파이썬) (0) | 2021.10.11 |
백준 로봇 청소기 코드 및 해설 (파이썬) (0) | 2021.10.11 |
백준 토마토 코드 및 해설 (파이썬) (0) | 2021.10.04 |