본문 바로가기

프로그래머스 퀴즈(Python)/level 2

23.02.08 파이썬 코딩 퀴즈#140 교점에 별 만들기(프로그래머스 스쿨)

이번 문제는 교점에 별 만들기 문제이다.

다음과 같은 직선이 주어졌을때, 선이 교차하는 지점에 별을 넣어주면 된다.

위 직선 좌표를 그래프로 그리면 위와 같은 그래프가 나온다.

이 때, 모든 교점의 좌표는 위의 좌표와 같고. 이 중 정수로만 표현되는 좌표는 총 5개 이다.

불필요한 격자 부분은 날리고 최소한의 크기만 나타내면 위와같은 배열이 나온다.

그렇게 전달받는 line 의 정보가 조금 이상하다.

식이 아닌 값을 전달 받는다... 조금더 설명을 내려보자.

두 직선의 교점이 존재할 경우를 식으로 표현한 내용이다.

제일 단순한 두 직선만 주어진 예제 3번을 보며 살펴보자

[1, -1, 0] 과 [2, -1, 0] 두 직선이 있다.

위 조건에 의해 A = 1, B = -1, E = 0 과 C =2, D = -1, F = 0 으로 값을 할당하여 계산 가능하다.

x = (BF-ED) / (AD - BC) 이므로, 이는 (0 - 0) / (-1 - -2) 즉 0이다.

y = (EC - AF) / (AD - BC) 이므로, 이는 (0 - 0) / (-1 - -2) 즉 0 이다.

그리고 AD - BC 는 -3 이기 때문에 평행 또는 일치하지 않는 두 직선이다. 따라서 두 직선의 교점은 (0,0)이 된다.

역시 설명에서도 (0,0)에서 교점이 발생한다고 되어 있다.

만약 설명에 수식이 없었다면, 교차점을 찾는데 상당히 애를 먹었을지도 모른다.

cross 에는 교차점 정보 좌표를, row 와 col 에는 각각 행,렬의 값을 전달한다. 이는 최종적으로 생성될 격자의 크기를 정하기 위함이다.

그리고 교차점이 하나인 경우는 빠르게 return 시켜 준다.

만약 여러개라면 다시 각 행렬의 최소,최대값 사이를 돌며 빈 문자열 line에 *, . 을 채워나가며 한 행마다 answer에 추가하여 준다.

아래 설명까지 읽지않은 사람들이 많은 듯 하다.