반응형
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
주어진 직선들의 교점을 구해, 그 자리에 별을 찍어 출력해야 한다.
참고 사항을 확인하여 교점을 구하는 방법을 알 수 있다.
정수로 표현되는 교점에만 별을 찍어야 함에 유의해야 한다.
우선 모든 교점을 다 구한 다음, 교점 좌표의 x,y별 min, max값을 구해 그 크기만큼의 배열을 생성한다.
이제 구한 교점들을 순회하며 좌표를 배열의 인덱스에 맞게끔 민맥싱하여 별을 찍어주면 된다.
def solution(line):
N = len(line)
cand = set()
min_x = min_y = float('inf')
max_x = max_y = -float('inf')
# 모든 직선을 서로 비교
for i in range(N):
for j in range(i+1, N):
point = get_xy(line[i], line[j])
if not point:
continue
x, y = point
min_x = min(min_x, x); max_x = max(max_x, x)
min_y = min(min_y, y); max_y = max(max_y, y)
cand.add(point)
# 필요한 넓이만큼 좌표 평면 생성
board = [["."] * (max_x - min_x+ 1) for _ in range(max_y - min_y + 1)]
# 별 찍기
for x, y in cand:
board[max_y - y][x - min_x] = '*'
return [''.join(row) for row in board]
def get_xy(l1, l2):
a, b, e = l1
c, d, f = l2
# 두 직선이 평행 또는 일치인 경우
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) or y != int(y):
return None
return (int(x), int(y))
반응형
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[Lv.1 / 프로그래머스 / 파이썬] 유연근무제 (2025 프로그래머스 코드챌린지 1차 예선) (0) | 2025.03.24 |
---|---|
[Lv.1 / 프로그래머스 / 파이썬] 택배 상자 꺼내기 (2025 프로그래머스 코드챌린지 2차 예선) (0) | 2025.02.17 |
[Lv.2 / 프로그래머스 / 파이썬] 충돌위험 찾기 (PCCP 기출문제 3번) (0) | 2025.02.11 |
[Lv.1 / 프로그래머스 / 파이썬] 데이터 분석 (PCCE 기출문제 10번) (1) | 2025.01.30 |
[Lv.1 / 프로그래머스 / 파이썬] 동영상 재생기 (PCCP 기출문제 1번) (1) | 2024.12.18 |