-
[Python] programmers 교점에 별 만들기알고리즘/문제풀이 2021. 11. 27. 22:27728x90
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/87377
2. 문제 요약
Ax + By + C = 0
으로 표현할 수 있는n
개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리기3. 아이디어 정리
- 이중 for문을 돌려 선 2개를 선택한다.
- 평행 또는 일치하는 경우 continue
- x, y 값이 정수가 아닌 경우 continue
- 2, 3번 통과하면 x,y 점을 추가하고 최대 x, y 최소 x, y 값 경신을 진행한다.
- 좌표를 그려준다.
4. 문제 풀이
4-1. 내 풀이
def solution(line): INF = float('inf') points = list() max_x = -INF min_x = INF max_y = -INF min_y = INF for i, l1 in enumerate(line): for j, l2 in enumerate(line[i+1:]): a, b, e = l1 c, d, f = l2 m = a * d - b * c if m == 0: # 평행 또는 일치 continue if (b * f - e * d) % m !=0 or (e * c - a * f) % m !=0: # 정수인지 확인(나머지가 없어야함!) continue x = (b * f - e * d) / m y = (e * c - a * f) / m x, y = int(x), int(y) points.append((x, y)) max_x = max(max_x, x) min_x = min(min_x, x) max_y = max(max_y, y) min_y = min(min_y, y) answer = [['.'] * (max_x - min_x + 1) for _ in range(max_y - min_y + 1)] for x, y in points: answer[max_y - y][x - min_x] = "*" return [''.join(l) for l in answer]
5. 결론
- 구현
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] programmers 뉴스 클러스터링 (0) 2021.12.04 [Python] programmers 입국심사 (0) 2021.12.04 [Python] 백준 21921 블로그 (0) 2021.11.27 [Python] 백준 12865 평범한 배낭 (0) 2021.11.27 [Python] 백준 13975 파일 합치기 3 (0) 2021.11.26