-
[위클리 챌린지] 교점에 별 만들기알고리즘/프로그래머스 2021. 11. 4. 21:12
https://programmers.co.kr/learn/courses/30/lessons/87377?language=python3
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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[위클리 챌린지] 아이템 줍기 (0) 2021.11.10 [위클리 챌린지] 피로도 (0) 2021.11.09 [동적계획법(Dynamic Programming)] 등굣길 (0) 2021.10.09 [동적계획법(Dynamic Programming)] N으로 표현 (0) 2021.10.09 [탐욕법(Greedy)] 구명보트 (0) 2021.10.09