이번 문제는 교점에 별 만들기 문제이다.
다음과 같은 직선이 주어졌을때, 선이 교차하는 지점에 별을 넣어주면 된다.
위 직선 좌표를 그래프로 그리면 위와 같은 그래프가 나온다.
이 때, 모든 교점의 좌표는 위의 좌표와 같고. 이 중 정수로만 표현되는 좌표는 총 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에 추가하여 준다.
아래 설명까지 읽지않은 사람들이 많은 듯 하다.
'프로그래머스 퀴즈(Python) > level 2' 카테고리의 다른 글
23.02.09 파이썬 코딩 퀴즈#142 피로도(프로그래머스 스쿨) (0) | 2023.02.09 |
---|---|
23.02.08 파이썬 코딩 퀴즈#141 n^2 배열 자르기(프로그래머스 스쿨) (0) | 2023.02.08 |
23.02.08 파이썬 코딩 퀴즈#139 전력망을 둘로 나누기(프로그래머스 스쿨) (0) | 2023.02.08 |
23.02.08 파이썬 코딩 퀴즈#138 빛의 경로 사이클(프로그래머스 스쿨) (0) | 2023.02.08 |
23.02.07 파이썬 코딩 퀴즈#136 모음사전(프로그래머스 스쿨) (0) | 2023.02.07 |