※ 문제
https://school.programmers.co.kr/learn/courses/30/lessons/87377
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
※ 문제 설명
- Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다.
제한사항
- line의 세로(행) 길이는 2 이상 1,000 이하인 자연수입니다.
- line의 가로(열) 길이는 3입니다.
- line의 각 원소는 [A, B, C] 형태입니다.
- A, B, C는 -100,000 이상 100,000 이하인 정수입니다.
- 무수히 많은 교점이 생기는 직선 쌍은 주어지지 않습니다.
- A = 0이면서 B = 0인 경우는 주어지지 않습니다.
- 정답은 1,000 * 1,000 크기 이내에서 표현됩니다.
- 별이 한 개 이상 그려지는 입력만 주어집니다.
입출력 예
line | result |
[[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] | ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] |
[[0, 1, -1], [1, 0, -1], [1, 0, 1]] | ["*.*"] |
[[1, -1, 0], [2, -1, 0]] | ["*"] |
[[1, -1, 0], [2, -1, 0], [4, -1, 0]] | ["*"] |
참고 사항
해당하는 참고사항으로 문제를 풀이
※ 나의 풀이
- cal_point(line1, line2)를 통해 참고사항을 고려한 함수 생성
- for loop를 통해 line1 과 다른 line2를 cal_point 호출하여 반환값이 존재한다면, arr 배열에 추가
- 최종 answer 조건에 맞는 배열 사이즈를 위해 x축, y축 min(), max()값 선언
- answer배열을 '.'으로 되어있는 것들로 먼저 선언 후 교점 값을 '*'로 변경
def cal_point(line1, line2):
"""
line1, line2 : 서로 다른 두개의 직선
두 개의 직선 간 교점이 없는 경우 -> return None
교점이 있는 경우 -> return [x, y]
"""
a, b, e = line1
c, d, f = line2
if a * d - b * c == 0:
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):
# 소수점 제거
x = int(x)
y = int(y)
return [x, y]
else:
return None
def solution(line):
arr = []
for i in range(len(line)):
for j in range(i + 1, len(line)):
if line[i] == line[j]:
continue
pos_x_y = cal_point(line[i], line[j])
if pos_x_y:
arr.append(pos_x_y)
min_x = min(x for x, y in arr)
max_x = max(x for x, y in arr)
min_y = min(y for x, y in arr)
max_y = max(y for x, y in arr)
x_len = max_x - min_x + 1
y_len = max_y - min_y + 1
ans_arr = [['.'] * x_len for _ in range(y_len)]
# 교점 찍기
for x, y in arr:
x = x - min_x
y = max_y - y
ans_arr[y][x] = '*'
ans_arr = [''.join(row_ans) for row_ans in ans_arr]
return ans_arr
'CODING_TEST' 카테고리의 다른 글
[백준/Python] 5525. IOIOI (0) | 2024.12.26 |
---|---|
[프로그래머스/Python] 피보나치 수 (0) | 2024.12.25 |
[프로그래머스/Python] 올바른 괄호 (0) | 2024.12.18 |
[프로그래머스/Python] 옹알이 (2) (0) | 2024.12.17 |
[프로그래머스/Python] [PCCE 기출문제] 10번 / 데이터 분석 (0) | 2024.12.17 |