링크
교점에 별 만들기
난이도
문제요약
Ax+By+E
형식으로 된 선분들의 정보가 제공될때, 정수로된 교점을 찾고, ["*.*",".*."]
처럼 교점에는 별을, 그외에는 .을 출력
- 그릴때에는 [“...”]이렇게 나오는경우 별이 그려진 영역에 맞춰 잘라서 [“.“]로 출력해준다.
접근
-
- 각 선분마다 교점 알고리즘 적용하여 교점 구하기
간단 알고리즘
- 교점 구하기
- 이미 제공된 교점 알고리즘을 적용한다.
- Ax+By+E,Cx+Dy+F 일때
- 추가적으로 확인해야하는
정수로된 교점
이므로 확인할값 % 1 == 0
을 통해 0이나오면 정수로 판단하여 교점을 구한다.
- point에 저장한다.
- 별 그리기 준비
- 배열로 표시하기위한 준비가 필요하며 위에서 만든 교점의 모음을 통해 진행한다.
- 교점의 크기에 딱맞는 크기의 배열을 구해야 하기때문에 이과정이 필요하다.
- left,right,up,down으로 left는 x인 가로축의 최소, right는 x의 최대, up은 y의 최대, down은 y의 최소로 구한다.
- width는 가로길이(right-left+1), hegith는 (up-down+1)로 각각 가로와 세로를 구해준다.
- 1을 더하는 이유는
(0,0)
좌표가 중앙에 존재하기 때문에 하나씩 높이가 늘어난다고 생각하면된다.
- 가로길이, 세로길이를 통해 배열로
"."
으로 구성된 별을 그릴 2차원 배열을 생성한다.
- star로 저장(2차원배열)
- 별 그리기
- 별을 그리기 위해서는 (0,0)의 중앙좌표에 맞춰 표현된 교점의 좌표를 좌측상단의 (0,0)으로 시작하는 배열 좌표로 변환이 필요하다.
- ex) 실제교점의 가로축 x=[-2,-1,0,1,2,3,4] 교점의 세로축 y=[-8,-7,-6,-5,-4]로 존재할때, 실제로 그려지는 배열에 맞게 변환하면 x=[0,1,2,3,4,5,6] y=[0,1,2,3,4]로 변환해야 배열의 좌표에 맞게 그릴 수 있다.
- 이해가 안되면 그림을 그려보자
- 좌표변환
- 교점에서는
x,y
이지만, 실제 배열에서는 [y좌표][x좌표]
로 높이가 앞쪽에 나오는것을 주의하자
- 각 point별로 x좌표는
left-x
,y좌표는 up-y
를 진행해준다.
star[up-y][left-x]="*"
를 통해 해당 배열의 값을 .
에서*
로 치환해준다.
후기
- 교점을 구하고 별을 그릴 준비를 하느데 큰 어려움은 없었다.
- 하지만 실제로 별을 그리는 부분에서 나의 약점인 행렬의 좌표변형에서 머리가 터지는줄 알았다.
- 실제 좌표를, 배열로 변환하는 과정을 제대로 표현하지 못하였고 오래걸렸다.
- 그림을 그려보고 좀더 생각을 했을때 깨우치고 풀 수 있었다.