프로그래머스 위클리 챌린지 : 교점에 별 만들기
문제 : https://programmers.co.kr/learn/courses/30/lessons/87377
코드
찾은 정수 교점들을 y값에 해당하는 x값들을 리스트 형태로 만든다.
y값은 key가 되고 y값에 해당하는 x값들의 리스트가 value가 되는 dictionary이다.
dictionary는 y값(key)을 기준으로 내림차순으로 정렬한다.
dictionary에 저장된 y값의 최댓값부터 최솟값까지 내려가며 결과를 출력한다.
dictionary의 첫 요소를 꺼낸다.
현재 y의 위치가 위에서 꺼낸 요소의 y 인 경우 꺼낸 요소에 포함된 x, y교점인 경우만 "*"를 출력하고
그 외의 좌표에서는 "."를 출력한다.
y범위 안에서 출력되는 한 행의 길이는 dictionary에 포함된 x값의 최솟값에서 최댓값의 범위이다.
만약 꺼낸 요소의 y가 현재 y의 위치와 일치하지 않는다면
꺼낸 요소는 다시 dictionary의 맨 앞에 삽입하고 다음 y값으로 이동한 뒤 또 dictionary에서 요소를 꺼내 비교하고 결과를 출력하는 과정을 반복한다.
def fine_vertex(line):
vertices = []
for i in range(len(line) - 1):
l1 = i
for j in range(i + 1, len(line)):
l2 = j
x_numerator = line[l1][1] * line[l2][2] - line[l1][2] * line[l2][1]
y_numerator = line[l1][2] * line[l2][0] - line[l1][0] * line[l2][2]
denominator = line[l1][0] * line[l2][1] - line[l1][1] * line[l2][0]
if denominator != 0:
x = x_numerator / denominator
y = y_numerator / denominator
if int(x) == x and int(y) == y:
vertices.append((x, y))
return vertices
def solution(line):
result = []
vertices = fine_vertex(line)
max_x = vertices[0][0]
min_x = vertices[0][0]
max_y = vertices[0][1]
min_y = vertices[0][1]
for x, y in vertices:
max_x = int(max(x, max_x))
min_x = int(min(x, min_x))
max_y = int(max(y, max_y))
min_y = int(min(y, min_y))
vertex_dict = dict()
for v in vertices:
if v[1] in vertex_dict:
vertex_dict[v[1]].append(v[0])
else:
vertex_dict[v[1]] = [v[0]]
vertex_dict = sorted(vertex_dict.items(), reverse=True)
w = max_x - min_x + 1
for i in range(max_y, min_y - 1, -1):
answer = ""
y, x = vertex_dict.pop(0)
if i == y:
for j in range(min_x, max_x + 1):
if j in x:
answer += "*"
else:
answer += "."
else:
answer = "." * w
vertex_dict.insert(0, (y, x))
result.append(answer)
return result
'PS > programmers' 카테고리의 다른 글
[programmers] 프로그래머스 위클리 챌린지 : 피로도 (0) | 2021.12.21 |
---|---|
[programmers] 프로그래머스 위클리 챌린지 : 최소직사각형 (0) | 2021.12.21 |
[programmers] 2019 카카오 개발자 겨울 인턴십 : 크레인 인형 뽑기 게임 (0) | 2021.12.15 |
[programmers] 2021 KAKAO BLIND : 신규 아이디 추천 (0) | 2021.12.01 |
[programmers] 2019 KAKAO BLIND RECRUITMENT : 실패율 (0) | 2021.11.29 |
댓글